首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单的ACM题-杭电1266,求reverse number解决思路

2012-04-28 
一个简单的ACM题---杭电1266,求reverse number一、[codeC/C++][/code]#includestdio.h#includestring.h

一个简单的ACM题---杭电1266,求reverse number
一、
[code=C/C++][/code]
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,m,k,a;  
scanf("%d",&n);
getchar();
while(n--)

char x[1001];
gets(x);
m=strlen(x);
k=0;  
for(i=m-1;i>=0;i--)
{
if(x[i]=='0')
k++;
else 
break;
}
if(x[0]=='-') 
{
printf("-");
for(a=m-k-1;a>0;a--)
printf("%c",x[a]);
}
else
{
for(a=m-k-1;a>=0;a--)
printf("%c",x[a]);
}
for(a=0;a<k;a++)  
printf("0");
printf("\n");
}
 return 0;
}

二、
[code=C/C++][/code]
#include<iostream>
using namespace std;
int main()
{
int n,group,count;
cin>>group;
while(group--)
{
count=0;
cin>>n;
if(n==0)
cout<<n<<endl;
if(n<0)
{
cout<<"-";
n=-n;
}
while(n%10==0)
{
n=n/10;
count++;
}
while(n!=0)
{
cout<<n%10;
n/=10;
}
while(count--)
cout<<"0";
cout<<endl;
}
system("pause");
return 0;
}

#####
两个问题:
1、第二个为什么会超时呢
2、第一个中的这句:
[code=C/C++][/code]
for(i=m-1;i>=0;i--)
{
if(x[i]=='0')
k++;
else 
break;
}
如果输入的数不仅末尾有0(如:1000234300),难道不会使末尾输出的0的个数增加吗
本人菜鸟,求解答。。。

[解决办法]
第二个是用 int整形去做,会倒置后可能会数据溢出:
若开始读入2147473647,虽然在32位int表示范围内,但若reverse,不久越界了吗

C/C++ code
for(i=m-1;i>=0;i--){if(x[i]=='0')k++;else  break;}这里只是求出数据 后面的0,就如你的例子 1000234300,只是求出后面有二个0,中间的0不会记录在里面,到遇到非0的3时,就break了。
[解决办法]
楼主,说的是,仔细看了下程序:
当n==0是就这样:
C/C++ code
    if(n==0)        {            cout<<n<<endl;            continue; //添加这句,要不然会往下执行,会死循环。        } 

热点排行