zoukankan      html  css  js  c++  java
  • 把数字倒序的几种方法(二更,增加了负数反序的情况)(c++)

    方法一:(最初级)

    【问题描述】
    把一个固定的5位数倒序。

    【输入形式】
    从键盘输入一个5位数。

    【输出形式】
    倒序后的5位数。

    【样例输入】
    12345

    【样例输出】
    54321

    解题思路:
    题目已经说明是固定的5位数了,就把每位分解输出就可以。

    解题代码:

    #include <iostream>
    using namespace std;
    
    main()
    {
        int num_input,num_output,a,b,c,d,e;
        cin>>num_input;
        a=num_input/10000; //num除10000取整,分离“万”位
        b=num_input/1000%10; //num先除1000取整,再除10取余,分离“千”位
        c=num_input/100%10; //num先除100取整,再除10取余,分离“百”位
        d=num_input/10%10; //num先除10取整,再除10取余,分离“十”位
        e=num_input%10; //num除10取余,分离“个”位
        num_output=a+b*10+c*100+d*1000+e*10000; //倒序
        cout<<num_output;
    }
    

    或者另外一种代码也可以,但稍微多打了几个字符:

    #include <iostream>
    using namespace std;
    
    main()
    {
        int num_input,num_output,a,b,c,d,e;
        cin>>num_input;
        a=num_input/10000;
        b=(num_input-a*10000)/1000;
        c=(num_input-a*10000-b*1000)/100;
        d=(num_input-a*10000-b*1000-c*100)/10;
        e=num_input%10;
        num_output=a+b*10+c*100+d*1000+e*10000; 
        cout<<num_output;
    }
    

    方法二:(初级)

    【问题描述】
    把一个不多于5位的正整数,并输出倒序。

    【输入形式】
    从键盘输入一个不多于5位的正整数。

    【输出形式】
    倒序后的数字。

    【样例输入】
    12345
    1234

    【样例输出】
    54321
    4321

    解题思路:
    题目要求是不超过5位的数,需要判断输入的数有几位。
    如果还像上一道题一样的代码,则输入1234会输出43210(就错误了)。

    解题代码:

    #include <iostream>
    using namespace std;
    
    int  main()
    {
        int num_input,num_output,a,b,c,d,e;
        cin>>num_input;
        a=num_input/10000;
        b=num_input/1000%10;
        c=num_input/100%10;
        d=num_input/10%10;
        e=num_input%10;
    
        if(a) num_output=a+b*10+c*100+d*1000+e*10000;//如果“万”位不为0,即存在
        if(a==0&&b!=0) num_output=b+c*10+d*100+e*1000;//如果“万”位为0,“千”位不为0,即只有四位数
        if(a==0&&b==0&&c!=0) num_output=c+d*10+e*100;//三位数
        if(a==0&&b==0&&c==0&&d!=0) num_output=d+e*10;//两位数
        if(a==0&&b==0&&c==0&&d==0) num_output=e;//一位数
    
        cout<<num_output<<endl;
    }
    

    方法三:(对目前我的水平来说算高级的)

    PS:可以看出上面两种方法都存在一个严重的问题,就是代码太长太长!这还是只对5位数进行倒序,如果是8位数,10位数呢……简直太麻烦,一点都不简洁

    【问题描述】
    把任意一个非负数倒序。

    【输入形式】
    从键盘输入任意一个非负数。

    【输出形式】
    倒序后的这个数。

    【样例输入】
    123456789
    1234567
    123

    【样例输出】
    987654321
    7654321
    321

    解题思路:
    当给的数范围很大的时候,就不能再用“数的分解”这种老思路解题了,而要想办法把输入数字的末位分离出来,加到一个新的变量(初始化为0)中,并且上几个分离出来的末位需要同时扩大10倍,一次一次的循环进行末位分离相加扩大倍数,直到输入数字被末位分离到不能再分离。(语言功底有限,解释的不是太清楚,见下面的代码展示)

    解题代码:
    //什么num_input , num_output的太烦了,直接用a代表输入的,b代表输出的了

    #include <iostream>
    using namespace std;
    
    int  main()
    {
        int a,b=0;
        cin>>a;
        while(a>0)//简直太简便了,都无法用言语来解释,参考下面图片
        {
            b=10*b+a%10;
            a/=10;//即 a=a/10
        }
        cout<<b<<endl;
    }
    

    每步运行展示:

    每步步骤展示

    方法四:(包含负数反序)

    【问题描述】
    编写函数,参数为一个整数,返回这个整数的反序数,
    例如参数是1576,返回一个整数6751,如果输入是1230,则返回321。
    在main函数中调用此函数,并将结果输出。
    int reverse(int num);

    【输入形式】
    一个整数。

    【输出形式】
    倒序后的这个数。

    【样例输入】
    0
    123
    100
    -23
    -0
    -100

    【样例输出】
    0
    321
    1
    -32
    0
    -1

    【提示】
    因为有多组测试数据,读取输入的时候建议采用如下形式:
    int num = 0;
    while(cin>>num)
    {
    //你的代码
    }
    输入最后按下CTRL+Z,可以结束输入。

    解题思路:
    方法三介绍了一种极为简便的倒叙方法,那么就把它做成一个调用函数,再加几个if判断正负数就可以完成了

    解题代码:

    #include <iostream>
    using namespace std;
    int reverse(int num);//倒序函数声明
    
    int main()
    {
        int num;
        while(cin>>num)
        {
            int b;//定义倒序完的数为 b
            if(num>=0)//如果输入的数是非负数
            {
                b=reverse(num);//则正常倒序
                cout<<b<<endl;//正常输出
            }
            else //如果输入的数是负数
            {
                num*=-1;//先把 num乘以(-1),使num便为正数
                b=reverse(num);//把正数倒序
                cout<<-b<<endl;//把倒序完的数添上一个负号再输出
            }
        }
    }
    
    int reverse(int num)//把方法三的倒序数拿下来做成一个函数调用
    {
        int b=0;
        while(num>0)
        {
            b=10*b+num%10;
            num/=10;
        }
        return b;
    }
    
    

    如果之后有新的方法会继续更新

  • 相关阅读:
    页眉插入图片,文字和页号(码)的设置
    MIT_JOS_Lab5
    MIT_JOS_Lab4_PartB_and_PartC
    MIT_JOS_Lab4_PartA
    Monte Carlo Integration
    A strategy to quantify embedding layer
    From DFA to KMP algorithm
    A problem of dimension in Vector Space and It's nullspace
    Pytorch 模型的存储与加载
    Jensen's inequality 及其应用
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626205.html
Copyright © 2011-2022 走看看