PAT 乙级 1002.写出这个数 C++/Java

1002 写出这个数 (20 分)

题目来源

 

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

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 $10^{100}$

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

C++实现:

分析:

因为数字的范围是小于$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 }

 

Java实现:

 

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner input = new Scanner(System.in);
 6         String str = input.nextLine();
 7         int num = 0;
 8         for (int i = 0; i < str.length(); i++) {
 9             num += str.charAt(i) - '0';
10         }
11         String s = String.valueOf(num);
12         String[] output = {"ling","yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
13         for (int i = 0; i < s.length(); i++) {
14             num = s.charAt(i) - '0';
15             if (i != 0)
16                 System.out.print(" ");
17             System.out.print(output[num]);
18         }
19     }
20 }

 

posted @ 2019-08-15 20:35  47的菠萝~  阅读(537)  评论(0编辑  收藏  举报