PAT乙級1002

1002 寫出這個數 (20分)

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384ios

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

輸入格式:

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

輸出格式:

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

輸入樣例

1234567890987654321123456789

輸出樣例

yi san wu

個人理解

由於天然數n可能爲很大的數字,因此使用字符串接受輸入,而後遍歷每一個字符,相加得出各位數字之和,計算和以後須要再轉化爲字符串,而後根據數字與漢語拼音的映射輸出便可。code

代碼段

#include <iostream>
#include <string>
#include <stdlib.h>
#include <sstream>
using namespace std;
int main(int argc, char** argv) {
    string seq;
    int number = 0;
    string map[] = {"ling", "yi", "er", "san", "si", "wu",
    "liu", "qi", "ba", "jiu"};
    cin >> seq;
    // 計算各位數字之和
    for (char i : seq) {
        number += i - 48;
    }
    stringstream ss;
    ss << number;
    // 將數字之和轉化爲字符串
    string result = ss.str();
    // 映射輸出漢語拼音
    int length = result.length();
    for (int i = 0; i < length; i++){
        cout << map[result[i] - 48];
        if (i != length-1 ){
            cout << " ";
        }
    }
}

> ps:字符在進行整數運算時,會以字符對應的ASSCI碼的十進制的值進行計算,因此須要進行轉換。ASSCI碼的部分表以下。還有調試時的狀態。

ASSCI碼

調試信息

相關文章
相關標籤/搜索