设计函数int reverseNum(int n),返回正整数n反转后的形式,如reverseNum(12345)的值为54321。
输入与输出要求:
输入一个正整数n,n的取值范围不会超过int类型变量,n不会有前导0,n的结尾也不会有0。输出该正整数的反转形式,输出如“The reverse form of number 12345 is 54321.”,占一行。
int reverseNum(int n)
{
int sum = 0;
int i,j,r,a;
long long m =10;
int n2=n;
for (i=1;n!=0;)
{ n=n/m;
if(n!=0)
{i++;} }
while(n2>0)
{ r=n2%10;
n2=n2/10;
for(j=i;j>=1;j--)
{ a=r;
a*=10;
if (j==1){ a=r;}
// a=r*10;
}
i=i-1;
sum+=a;
}
return sum;
}
我已经知道简单写法,但我想知道这个的错误在哪里,不用提供那个简单的多的方法了,只要挑错,感谢!
for(j=i;j>=1;j--)
{ a=r;
a*=10;
if (j==1){ a=r;}
}
问题在这里,执行for时,最后肯定会满足if条件,导致a=r
for循环中的if是不需要的,去掉,并且将a=r放在for上面
a=r;
for(j=i;j>=1;j--)
{
a*=10;
}
我来帮你找错
逻辑太复杂了
int sun = 0;
while(n)
{
sum = sum * 10 + n%10;
n/=10;}
return sum;
这样就可以了
您好,刚刚看了一下您的代码,大胆的推测了您的编程思路:
1.您第一个for循环的i为了得到输入n的总位数,如12345,i=5;
2.while循环实现了个位数的取出以及n的不断左移,实现对个位数的不断取出且最终保存到变量a,while里面for循环的*10并没有起效果,应该把取出来的a放在for循环上面,您代码里只是让取出来的a与sum进行了相加,以致最终的结果为sum=0+5+4+3+2+1=15,作为函数的输出。
思路挺好的,就是在取出的个位数通过每次循环乘以10,再相加。