1. 程式人生 > >把數字倒序的幾種方法(不定時更新)(c++)

把數字倒序的幾種方法(不定時更新)(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;
}

每步執行展示:

每步步驟展示

目前就我的新手水平來說,這些是最近做題的整理,如果之後有新的方法會繼續更新