板栗說算法 之 PAT 乙級 1002 寫出這個數(全方面解析)

一、題目

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

輸入格式:

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

輸出格式:

在一行內輸出 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 << " ";
     };
 };
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章