C语言的问题,到底错在哪了?输入有的数字答案是对的,输入有的数字答案就差了1。。。

/*输入一个整数 in,输出其逆序数。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数,函数形参number的类型是int,函数类型是int。例如,reverse(12345)的返回值是54321。
输入输出示例:括号内是说明
输入
5 (repeat=4)
12345 (in=12345)
-100 (in=-100)
-2 (in=-2)
99 (in=99)
0 (in=0)
输出
54321 (12345的逆序数)
-1 (-100的逆序数)
-2 (-2的逆序数)
99 (99的逆序数)
0 (0的逆序数)
*/
#include <stdio.h>
#include <math.h>
int main(void)
{
long in, res;
int ri, repeat;
long reverse(long number);

scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%ld", &in);
res=reverse(in);
printf("%ld\n", res);
}
}
long reverse(long number)
{int i,k,c,q,flag;
long sum,m;
flag=1;
if(number<0){number=-number;flag=-1;}
sum=0;
i=10;
m=number;
c=0;
do{
m=m/i;
c++;
}while(m!=0);
for(q=1;q<=c;q++)
{
k=number%10;
sum=k*pow(10,c-q)+sum;
number=number/10;
}
return sum*flag;
}

程序太复杂了,修改如下:
long reverse(long number)
{
long sum;

sum=0;
while( number!=0 )
{
sum=sum*10+number%10;
number/=10;
}
return sum;
}

你的代码中的问题,估计是pow()的返回值是double,在进行隐式转换成long时,产生了数据丢失!
温馨提示:答案为网友推荐,仅供参考