一、題目
讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:
每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裏保證 n 小於 10100。
輸出格式:
在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後一個拼音數字後沒有空格。
輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
二、想法
1.讀入一個正整數n,計算各位數字之和。
計算的是各位數字之和,所以不需要int類型來存儲,還需要一個個提。使用string來儲存方便直接讀取各位數字。
//讀取用戶輸入
string num;
cin>>num;
2.計算各位數字之和
因爲是計算各位數字之和,所以我們需要用int類型來累加。
“各位”的遍歷使用循環,並用string類裏的size()來判斷結束。
用string類型來接收輸入的,那麼我怎麼從string裏的一個字符轉爲數字呢?答案是string[0]輸出的單個字符,可以用ascii碼來進行轉換。
//用來累加的數字
nt tempnum = 0;
//使用循環進行累加
for(int i = 0; i < num.size();i++)
{
//使用ascii碼進行轉換
tempnum += num[i] - '0';
}
3.用漢語拼音
使用漢語拼音,看上文中的輸出樣例可知,1就是“yi”,2就是“2”,所以使用固定數組即可;
//因爲累加的tempnum爲10進制
string name[10] ={"ling","er","san","si","wu","liu","qi","ba","jiu"};
4.如何讀取累加好的的各位數字呢?
//使用to_string可直接將int類型轉爲string
string temp = to_string(tempnum);
也可以使用取模的方式取出各位數字裝進容器內,使用反向迭代器也可以打印。
5.根據temp來打印拼音.
for(int i = 0; i < temp.size(); i++)
{
cout << name[temp[i] - '0'];
}
三、代碼實現
#include <iostream>
using namespace std;
#include <string>
int main() {
//拼音庫
string name[10] = {
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"
};
//用戶輸入
string num;
cin >> num;
//用來累加的數
int tempnum = 0;
//循環累加
for(int i = 0; i < num.size(); i++)
{
//使用ascii碼進行轉換
tempnum+= num[i] - '0';
};
//int 轉 string 好提取
string temp = to_string(tempnum);
//循環打印
for(int i = 0; i < temp.size();i++)
{
//使用ascii碼轉換輸出拼音
cout << name[(temp[i]-'0')] ;
//最後一下不空格
if(i !=(temp.size()-1))
{
cout << " ";
};
};
}