PAT 乙級 1002.寫出這個數 C++/Java

1002 寫出這個數 (20 分)

題目來源html

 

讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。java

輸入格式:

每一個測試輸入包含 1 個測試用例,即給出天然數 n 的值。這裏保證 n 小於 $10^{100}$ios

輸出格式:

在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後一個拼音數字後沒有空格。測試

輸入樣例:

1234567890987654321123456789

輸出樣例:

yi san wu

C++實現:

分析:

由於數字的範圍是小於$10^{100}$,因此要用string接收輸入,將string中的每一位數字累加到sum裏,用 to_string(sum) 將sum轉化成字符串nums,而後逐一輸出nums對應的拼音spa

 

 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)的特色code

一樣用string接收輸入,將string中的每一位數字累加到sum裏,接着將sum的每一位數字保存到棧中,而後進行出棧的操做,輸出對應的拼音htm

假定sum = 135,那麼入棧的順序就是(棧底)5 3 1(棧頂),出棧的順序就是1 3 5blog

 

 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 }
相關文章
相關標籤/搜索