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 }