昔日少年郎 发表于 2018-8-25 16:51:00

对一个三位数进行逆序操作,帮忙看错在哪里


#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;
   
}

ba21 发表于 2018-8-25 19:12:53

这样该下你看怎么样:
#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:15:08

本帖最后由 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 19:24:03

本帖最后由 他非她 于 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]
查看完整版本: 对一个三位数进行逆序操作,帮忙看错在哪里