鱼C论坛

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

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

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

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

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

x
#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;
    
}
最佳答案
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;
    
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
    
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
    
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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