鱼C论坛

 找回密码
 立即注册
查看: 1942|回复: 3

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

[复制链接]
发表于 2018-8-25 16:51:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int number1,number2 = 0;
  5.     int a,b;
  6.     int n = 2;
  7.     printf("请输入一个正整数:");
  8.     scanf("%d",&number1);
  9.     while(number1 > 0)
  10.     {
  11.         a = number1 % 10;
  12.         while(n > 0)
  13.             {
  14.                 a *= 10;
  15.                 n --;
  16.             }
  17.         n --;
  18.         number2 += a;
  19.         b = number1 / 10;
  20.         number1 = b;
  21.     }
  22.     printf("%d\n",number2);
  23.    
  24.     return 0;
  25.    
  26. }
复制代码

最佳答案
2018-8-25 19:24:03
本帖最后由 他非她 于 2018-8-25 20:47 编辑

问题出在n上,看起来n用来表示:未移动位数-1,即把后面的数字向前移动的位数,但是在里面的小循环结束后,n=0,然后又n--变成-1了。

可以另外设置一个变量,譬如digit,初始化为总的位数,在循环里赋值给n, 每次移动前让n都得到正确的移动位数,这样就可以了。

程序改动如下:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int number1,number2 = 0;
  5.     int a,b,n;
  6.     int digit = 3;                                            //因为输入的是3位数
  7.     printf("请输入一个正整数:");
  8.     scanf("%d",&number1);
  9.     while(number1)
  10.     {
  11.         a = number1 % 10;
  12.         n = --digit;                                       //每次要移动的位数是未移动位数-1
  13.         while(n)
  14.             {
  15.                 a *= 10;
  16.                 n --;
  17.             }
  18. //        n --;                                             此句不知何为
  19.         number2 += a;
  20.         b = number1 / 10;
  21.         number1 = b;
  22.     }
  23.     printf("%d\n",number2);
  24.    
  25.     return 0;
  26.    
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-25 19:12:53 | 显示全部楼层
这样该下你看怎么样:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int number1,number2 = 0;
  5.     int a;
  6.     int n = 3;
  7.         int m = 100;


  8.     printf("请输入一个正整数:");
  9.     scanf("%d",&number1);
  10.     while(n)
  11.     {
  12.         a = number1 % 10;  
  13.                
  14.         number2 += m*a;               
  15.                 n --;
  16.                 m /=10;
  17.         number1 /=  10;


  18.     }
  19.     printf("%d\n",number2);
  20.    
  21.     return 0;
  22.    
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 19:15:08 | 显示全部楼层
本帖最后由 TyCk 于 2018-8-25 19:19 编辑
  1. while(n > 0)
  2.             {
  3.                 a *= 10;
  4.                 n --;
  5.             }
  6.         n --;  //楼主的意图是让n=1吧?
复制代码

标出来的地方,改为n++,O(∩_∩)O~,还是不可以的,感觉好麻烦呐……
感觉一行代码就可以啊:
  1. number2 = (number1%10)*100+(number1/10%10)*10+number/100*1;
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 19:24:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 他非她 于 2018-8-25 20:47 编辑

问题出在n上,看起来n用来表示:未移动位数-1,即把后面的数字向前移动的位数,但是在里面的小循环结束后,n=0,然后又n--变成-1了。

可以另外设置一个变量,譬如digit,初始化为总的位数,在循环里赋值给n, 每次移动前让n都得到正确的移动位数,这样就可以了。

程序改动如下:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int number1,number2 = 0;
  5.     int a,b,n;
  6.     int digit = 3;                                            //因为输入的是3位数
  7.     printf("请输入一个正整数:");
  8.     scanf("%d",&number1);
  9.     while(number1)
  10.     {
  11.         a = number1 % 10;
  12.         n = --digit;                                       //每次要移动的位数是未移动位数-1
  13.         while(n)
  14.             {
  15.                 a *= 10;
  16.                 n --;
  17.             }
  18. //        n --;                                             此句不知何为
  19.         number2 += a;
  20.         b = number1 / 10;
  21.         number1 = b;
  22.     }
  23.     printf("%d\n",number2);
  24.    
  25.     return 0;
  26.    
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 03:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表