1. 程式人生 > >PAT乙級1002. 寫出這個數 C++

PAT乙級1002. 寫出這個數 C++

這裡寫圖片描述

本人沒有什麼特殊的簡單的解題技巧,為了安全,此次用了C++的字串,從n
小於10的100次方可以看出n肯定不是long之類的,應該是字串。主要就是對int和string之間的轉換,以及輸出了。我的程式碼如下,個人感覺應該不是最優的,但是基本能講清:

#include <iostream>
#include <string>
using namespace std;
void static readNumber(char char_number);
int main()
{
    string input;//輸入的數字
    cin>>input;
    unsigned
int sum=0;//和 //求和 for(unsigned int i=0;i<input.length();i++) { sum+=(unsigned int)input[i]-48; } //裝入倒序的結果字串 string number_sum=""; while(1) { number_sum+=(char)(sum%10+48); sum/=10; if(sum/10==0)//當這個運算進行到還剩最後一位的時候,也有可能是隻有一位,並且還是零 { if
(sum%10!=0)//從這裡,我們考慮是零的邊界情況,只有這一位不是零的時候才裝入 { number_sum+=(char)(sum%10+48); } break; } } //變為正序字串,裝入結果集 string result=""; for(int i=number_sum.length()-1;i>=0;i--) { result+=number_sum[i]; } //輸出結果 for(int i=0;i<result.length();i++) { readNumber(result[i]); if
(i!=result.length()-1)//當且僅當遍歷輸出的數字不是最後一個的時候才打印空格 { cout<<" "; }else { } } system("pause"); return 0; } void static readNumber(char char_number) { switch((int)char_number-48) { case 0: cout<<"ling"; break; case 1: cout<<"yi"; break; case 2: cout<<"er"; break; case 3: cout<<"san"; break; case 4: cout<<"si"; break; case 5: cout<<"wu"; break; case 6: cout<<"liu"; break; case 7: cout<<"qi"; break; case 8: cout<<"ba"; break; case 9: cout<<"jiu"; break; } }

最後,談一點我的感想吧。string這個類還是很神奇的,其實本題中沒有顯現出這個東西的優越性,用char陣列一樣可以解決。當然,對於“逆序”這件事兒,方法還是很多的,我們可能首先就想到棧這個東西,逆序其實有時候還會用到雙向佇列,等等吧。祝願大家程式設計愉快~沒有bug~