PAT乙级1002题:写出这个数(20)

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。

输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:
1234567890987654321123456789
输出样例:

yi san wu


以下是我的源码:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

class Solution{
  public:
    void Spell(string str){
      int n = str.size();
      int sum = 0;
      for (int i = 0; i < n; i++){
        sum += str[i] - '0';
      }
      
      stringstream ss;
      ss << sum;
      string ans = ss.str();

      int len = ans.size();
      for (int i = 0; i < len; i++){
        cout << Spelling[ans[i]-'0'];
        if (i < len - 1) cout << " ";
        else cout << endl;
      }
    }
  private:
    string Spelling[10] = {
      "ling",
      "yi",
      "er",
      "san",
      "si",
      "wu",
      "liu",
      "qi",
      "ba",
      "jiu"
    };  
};

int main(){
  string str;
  cin >> str;
  
  Solution solution;
  solution.Spell(str);
  
  return 0;
}


思路:由于100位的数字超出了整型数能够表示的范围,故考虑用string类进行存储。计算各位数字之和后,再把该sum值转为string类,再把每位转化为拼音。


你可能感兴趣的:(源码,pat,乙级,写出这个数)