XHJJ_PAT乙级1002

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

输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的100次方。


输出格式:

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

输入样例:
1234567890987654321123456789

输出样例:
yi san wu


这题也一般。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char num[100];//10的100次方太大了,后来发现用字符串数组才是出路 
 6     char hanzi[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//有人用了switch-case,我觉得用数组更简洁 
 7     scanf("%s",&num);
 8     int len = strlen(num);//string库函数 
 9     int sum = 0;
10     while(len--)
11         sum =sum +num[len]-'0';
12     int BitOfSum[100];//用于记录总和的各个位数
13     int bit=0;
14     while(sum)
15     {
16         bit++;
17         BitOfSum[bit] = sum%10;
18         sum /=10;
19     }
20     for(int i=bit;i>0;i--)//从尾至首输出
21     {
22         printf("%s",hanzi[BitOfSum[i]]);    
23         if(i>1)
24             printf(" ");
25     }    
26 } 

发现网上有更好的一个,非常灵活地用了String库,代码及其简洁,学习学习!

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int main() {
 5     string s;
 6     cin >> s;
 7     int sum = 0;
 8     string str[10] =  {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
 9     for (int i = 0; i < s.length(); i++)
10         sum += (s[i] - '0');
11     string num = to_string(sum);
12     for (int i = 0; i < num.length(); i++) {
13         if (i != 0) cout << " ";
14         cout << str[num[i] - '0'];
15     }
16     return 0;
17 }

猜你喜欢

转载自www.cnblogs.com/xhjj/p/12153511.html