当前位置: 代码迷 >> 综合 >> 1002 写出这个数 (20分) PAT (Basic Level) Practice (中文)
  详细解决方案

1002 写出这个数 (20分) PAT (Basic Level) Practice (中文)

热度:18   发布时间:2024-01-29 18:07:15.0

题目:

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

AC代码:

#include<iostream>
#include<string> 
using namespace std;int main()
{string math;cin>>math;string words[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};int sum=0,a[5],i;for(i=0;i<math.length();i++){sum+=(math[i]-'0');}string num=to_string(sum);for(i=0;i<num.length();i++){if(i!=0)cout<<" ";cout<<words[num[i]-'0'];}return 0;
} 

 一开始,我用数组去做,结果发现数组太小了。在参考了柳神的AC代码后,我受到了很大的启发。

在本题中,用字符串math储存数字。建立一个大小为10的字符串数组word[10],用word[10]储存0-9的汉字拼音。在循环中,巧妙的用math的每一位数的ascii码减去0的ascii码,差值即为所对应的数字。接下来,定义一个值为to_string的字符串num,to_string是<string>里的函数,返回值为参数所对应的字符串。在接下来的循环里,若i !=0,则先输出空格,再输出字符。输出的字符是word里第num[i]减去0的ascii码的字符。

 

  相关解决方案