/*
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...