把數字倒序的幾種方法(不定時更新)(c++)
阿新 • • 發佈:2018-12-16
方法一:(最初級)
【問題描述】 把一個固定的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;
}
每步執行展示:
目前就我的新手水平來說,這些是最近做題的整理,如果之後有新的方法會繼續更新