对一个三位数进行逆序操作,帮忙看错在哪里
#include <stdio.h>
int main()
{
int number1,number2 = 0;
int a,b;
int n = 2;
printf("请输入一个正整数:");
scanf("%d",&number1);
while(number1 > 0)
{
a = number1 % 10;
while(n > 0)
{
a *= 10;
n --;
}
n --;
number2 += a;
b = number1 / 10;
number1 = b;
}
printf("%d\n",number2);
return 0;
}
这样该下你看怎么样:
#include <stdio.h>
int main()
{
int number1,number2 = 0;
int a;
int n = 3;
int m = 100;
printf("请输入一个正整数:");
scanf("%d",&number1);
while(n)
{
a = number1 % 10;
number2 += m*a;
n --;
m /=10;
number1 /=10;
}
printf("%d\n",number2);
return 0;
} 本帖最后由 TyCk 于 2018-8-25 19:19 编辑
while(n > 0)
{
a *= 10;
n --;
}
n --;//楼主的意图是让n=1吧?
标出来的地方,改为n++,O(∩_∩)O~,还是不可以的,感觉好麻烦呐……
感觉一行代码就可以啊:
number2 = (number1%10)*100+(number1/10%10)*10+number/100*1; 本帖最后由 他非她 于 2018-8-25 20:47 编辑
问题出在n上,看起来n用来表示:未移动位数-1,即把后面的数字向前移动的位数,但是在里面的小循环结束后,n=0,然后又n--变成-1了。
可以另外设置一个变量,譬如digit,初始化为总的位数,在循环里赋值给n, 每次移动前让n都得到正确的移动位数,这样就可以了。
程序改动如下:
#include <stdio.h>
int main()
{
int number1,number2 = 0;
int a,b,n;
int digit = 3; //因为输入的是3位数
printf("请输入一个正整数:");
scanf("%d",&number1);
while(number1)
{
a = number1 % 10;
n = --digit; //每次要移动的位数是未移动位数-1
while(n)
{
a *= 10;
n --;
}
// n --; 此句不知何为
number2 += a;
b = number1 / 10;
number1 = b;
}
printf("%d\n",number2);
return 0;
}
页:
[1]