[PAT Basic] 1002.写出这个数
Posted 47pineapple
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PAT Basic] 1002.写出这个数相关的知识,希望对你有一定的参考价值。
1002 写出这个数 (20 分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 $10^100$
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
分析:
因为数字的范围是小于$10^100$,所以要用string接收输入,将string中的每一位数字累加到sum里,用 to_string(sum) 将sum转化成字符串nums,然后逐一输出nums对应的拼音
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() 6 7 string str; 8 string output[10] = "ling","yi","er","san","si","wu","liu","qi","ba","jiu" ; 9 int sum = 0; 10 11 cin >> str; 12 int length = str.length(); 13 14 for (int i = 0; i < length; ++i) 15 16 sum = sum + str[i] - ‘0‘; 17 18 19 string nums = to_string(sum); 20 21 for (int i = 0; i < nums.length(); ++i) 22 23 if (i != 0) 24 25 cout << " "; 26 27 cout << output[nums[i] - ‘0‘]; 28 29 30 return 0; 31
另解:
利用栈后进先出(FILO)的特点
同样用string接收输入,将string中的每一位数字累加到sum里,接着将sum的每一位数字保存到栈中,然后进行出栈的操作,输出对应的拼音
假定sum = 135,那么入栈的顺序就是(栈底)5 3 1(栈顶),出栈的顺序就是1 3 5
1 #include <iostream> 2 #include <string> 3 #include <stack> 4 using namespace std; 5 6 int main() 7 8 string str; 9 string output[10] = "ling","yi","er","san","si","wu","liu","qi","ba","jiu" ; 10 stack<int> v; 11 int sum = 0; 12 13 cin >> str; 14 int length = str.length(); 15 16 for (int i = 0; i < length; ++i) 17 18 sum = sum + str[i] - ‘0‘; 19 20 //135 21 while (sum != 0) 22 23 v.push(sum % 10); 24 sum /= 10; 25 26 cout << output[v.top()]; 27 v.pop(); 28 while (!v.empty()) 29 30 cout << " " << output[v.top()]; 31 v.pop(); 32 33 return 0; 34
以上是关于[PAT Basic] 1002.写出这个数的主要内容,如果未能解决你的问题,请参考以下文章