[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.写出这个数的主要内容,如果未能解决你的问题,请参考以下文章

PAT (Basic Level) Practice (中文)1002

PAT字符处理题---1002 写出这个数 (20分)

PAT乙级-1002 写出这个数

PAT 1002 写出这个数

PAT 1002. 写出这个数

PAT乙级.1002.写出这个数