问题描述
- 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;
}
}
解决方案
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
解决方案六:
楼上写的已经答了你的问题,我在想如果是一个大数呢,用字符串处理不是更好?