数字逆序输出 疑惑,该怎么解决
数字逆序输出 疑惑
这是我以前数字逆序输出的方法
但是我在提交hdu1266时,出现WA。。
而将代码换成下面的,却AC了
我感觉上面的代码好像没问题,求大神分析下错误原因
顺便贴下完整代码方面提交
------解决方案--------------------
可能原因:
最上面的方法可能导致数据溢出。如num=1234567899,逆序以后就溢出了(int 型最大值是2147483647)
------解决方案--------------------
这是我以前数字逆序输出的方法
s=0;
while(num)
{
s= s*10+num%10;
// cout<<num%10;
num /=10;
}
cout<<s;
但是我在提交hdu1266时,出现WA。。
而将代码换成下面的,却AC了
while(num)
{
// s= s*10+num%10;
cout<<num%10;
num /=10;
}
我感觉上面的代码好像没问题,求大神分析下错误原因
顺便贴下完整代码方面提交
#include <iostream>
using namespace std;
int main()
{
int n,num,zero,s;
cin>>n;
while(n--)
{
zero=0;
s=0;
cin>>num;
if(!num)
cout<<0<<endl;
else
{
if(num<0)
{
cout<<'-';
num=-1*num;
}
while(num%10==0)
{
zero++;
num=num/10;
}
while(num)
{
s= s*10+num%10;
// cout<<num%10;
num /=10;
}
cout<<s;
while(zero--)
cout<<'0';
cout<<endl;
}
}
return 0;
}
------解决方案--------------------
可能原因:
最上面的方法可能导致数据溢出。如num=1234567899,逆序以后就溢出了(int 型最大值是2147483647)
------解决方案--------------------
char * rev(int a)
{
char * str = (char *)malloc(16);
sprintf(str, "%d", abs(a));
return strrev(str);
}