PAT1002寫出這個數

2021-09-13 11:44:11 字數 1972 閱讀 4766

/*

1002 寫出這個數

讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

輸入格式:

每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10的100次方

輸出格式:

在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。

輸入樣例:

1234567890987654321123456789

輸出樣例:

yi san wu

*/題目分析:

接收乙個小於等於10的100次方的數字,將這個數字的每一位相加,用拼音輸出和的每一位

解題思路:

unsigned longl long int 型的數最大是2的64次方-1,而本題中要求n的最大值是10的100次方,顯然不能用任何int型別儲存,所以,這裡我們用字串(string)來儲存這乙個小於10的100次方的自然數

將數字存入字串中後,分別將字串的每一位切割出來,轉換成整數,累加。

將0,ling;1,yi;......9,jiu;存入map中

在最後的輸出過程中,我們需要用到棧。為什麼呢?舉個例子:

sum=135;如果我要分離出sum的每一位,我需要做的是讓sum取餘10,然後sum=sum/10,繼續重複如上操作,直到sum為0;這樣得到的結果是 5 3 1,但是我們需要的是1 3 5,所以,需要在分離sum每一位的過程中,要一邊獲取sum的最後一位,一邊入棧,全部入棧完成後,再出棧。

在出棧過程中,一邊出棧,一邊輸出map[i]即可。

由於一行中的最後一位後面沒有空格,所以在輸出完當前數字並出棧後,判斷棧是否為空,如果棧為空,那麼說明當前數字是最後一位了,不輸出空格,否則,輸出空格

具體思路如下:

1.宣告乙個字串,用來存數字

宣告乙個int sum=0;用來求和

宣告乙個mapmapnumber(需#include);用來匹配數字和拼音,如key=0,value="ling"。將(0,"ling"),(1,"yi"),......(9,"jiu")insert到map

宣告乙個棧 stacks(需#include);用來暫存sum分離出的各個位

2.宣告乙個變數i,用來標記分割string的位置,為i賦值string.size()-1,從string的第i位開始分割,分割1位(當然,你也可以從string的第一位開始分割),並將分割的結果轉換成整數,累加到sum,i--執行步驟3

3.判斷i是否大於0,如果大於0,表示還沒有分割完,執行步驟2,反之執行步驟4

4.將累加得到的sum的每一位分離出來,一邊分離一邊入棧

5.出棧,根據棧頂元素的值,通過map,可以輸出每乙個數字對應的拼音,輸出拼音後,判斷棧是否為空,如果不為空,輸出空格

tips:

本題中用到的函式:

string substr(start,length);此函式擷取string的一段,並返回擷取到的字串,substr有兩個引數,第乙個是擷取字串的開始位置,第二個是擷取字串的長度

int atoi(const char *);此函式是將char*指標所指的字元轉轉換成整型資料,在題中,我們需要將擷取到的字串轉換成整型,但是擷取到的字串是string型別的,並不滿足atoi對引數的要求,所以string需要呼叫c_str()方法轉換成char*

map.insert(pair(1,"yi"));將乙個鍵值對插入map

stack.push(int value);入棧

stack.top();返回棧頂元素,但不出棧

stack.pop();出棧,但不返回棧頂元素

stack.empty();判斷棧是否為空,為空的話返回true,否則返回false

#include#include#includeusing namespace std;

int main(void)

while(sum!=0)

while(!s.empty()){

cout<

PAT1002 寫出這個數

讀入乙個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。輸出格式 在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 123456789098765...

PAT 1002 寫出這個數

讀入乙個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。輸出格式 在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 123456789098765...

PAT 1002 寫出這個數

讀入乙個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。輸出格式 在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 123456789098765...