C语言函数问题求解答,求大神

输入2个整数,分别将其逆向输出,要求定义并调用函数fun(n),它的功能是返回n的逆向值。例如,fun(123)的返回值是321
函数出什么问题了,输出错了
#include
#include
int fun(int x);
int main(void)
{
int m1,m2;
printf("Input m1: ");
scanf("%d",&m1);
printf("Input m2: ");
scanf("%d",&m2);
printf("%d's reverse is:%d ",m1,fun(m1));
printf("%d's reverse is:%d ",m2,fun(m2));
return 0;}

int fun(int x)
{
int count,i,d,p,sum=0;
p=x;
if (x>0){
do{ x=x/10;
count++;} while (x!=0);
for (i=1;i<=count;i++){
d=p%10;

sum=sum+p*pow(10,count-i);
p=p/10;}

return sum;}
if (x<0){
 x=-x;

do{ x=x/10;
count++;} while (x!=0);
for (i=1;i<=count;i++){
d=p%10;

sum=sum+p*pow(10,count-i);
p=p/10;}
return  -sum;

}
}

c

6个回答

个人认为将数字先转成字符串,然后进行反转处理会简单很多。例如:字符串可以求长度
处理完后的字符串,再转成数字即可完成要求。

int fun(int x)
{
int flg,i,sum=0;
if (x>0){
x=-x;
flg=1;
}
do{ m=x%10;
x=x/10;
sum = sum * 10 + m;
} while (x!=0);
if (flg ==1) {
sum = -sum;
}
return sum;
}

一楼的下面的代码里应该用d而不是p

sum=sum+p*pow(10,count-i);

第一:count应赋初值为0,即count=0;第二:sum=sum+p*pow(10,count-i);应换为sum=sum+d*pow(10,count-i);第三:最后一行代码:
return -sum;应改为return sum;因为此时p已经为负数,不需要再加负号
int fun(int x)
{
int count=0,i,d,p,sum=0;
p=x;
if (x>0)
{
do
{
x=x/10;
count++;
} while (x!=0);
for (i=1;i<=count;i++)
{
d=p%10;
sum=sum+d*pow(10,count-i);
p=p/10;
}
return sum;
}
if (x<0)
{
x=-x;
do
{
x=x/10;
count++;
} while (x!=0);
for (i=1;i<=count;i++)
{
d=p%10;
sum=sum+d*pow(10,count-i);
p=p/10;
}
return sum;
}
}

另外在scanf后要吸收回车符号,或者fflush

楼上写的已经答了你的问题,我在想如果是一个大数呢,用字符串处理不是更好?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐