把数字倒序的几种方法(二更,增加了负数反序的情况)(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;
}

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

原文地址:https://www.cnblogs.com/yuzilan/p/10626205.html