题目
1002 写出这个数 (20 分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100次方。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
代码及思路
根据题目给出的n的范围可知,单纯的数学运算是无法按要求完成题目的。考虑使用字符串来完成题目。通过ASCII码值将string型数字转成int型数字进行求和(sum)。通过除法和取模运算获得sum的各位数值并用同样的方式将int型数字转成string型数字,存储在字符数组中(因为最大允许输入的数据是10^100-1,其各个位数之和为999,所以字符数组最大长度为3)。通过if判断进行汉语拼音的输出。
#include<iostream>
#include<string>
using namespace std;
void out(char c)
{
if(c=='0')
{
cout<<"ling";
}
else if(c=='1')
{
cout<<"yi";
}
else if(c=='2')
{
cout<<"er";
}
else if(c=='3')
{
cout<<"san";
}
else if(c=='4')
{
cout<<"si";
}
else if(c=='5')
{
cout<<"wu";
}
else if(c=='6')
{
cout<<"liu";
}
else if(c=='7')
{
cout<<"qi";
}
else if(c=='8')
{
cout<<"ba";
}
else if(c=='9')
{
cout<<"jiu";
}
}
int main()
{
string num;
int sum = 0;
int i;
char c[3];
cin>>num;
int length = num.length();
for(i = 0;i<length;i++)
{
sum = sum + ((int)num[i] - 48);
}
i = 0;
while(sum!=0)
{
c[i] = (char)(sum % 10 + 48);
sum = (int)(sum / 10);
i++;
}
length = i;
for(i=length-1;i>0;i--)
{
out(c[i]);
cout<<" ";
}
out(c[0]);
return 0;
}