题目
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10
100
。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
我的解法
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int judge1(char a)//统计每个字符所对应的数字
{
int n;
switch(a)
{
case'0':n=0;break;
case'1':n=1;break;
case'2':n=2;break;
case'3':n=3;break;
case'4':n=4;break;
case'5':n=5;break;
case'6':n=6;break;
case'7':n=7;break;
case'8':n=8;break;
case'9':n=9;break;
}
return n;
}
string judge2(int a)//得出每个数字所对应的字符串
{
string n;
switch(a)
{
case 0:n="ling";break;
case 1:n="yi";break;
case 2:n="er";break;
case 3:n="san";break;
case 4:n="si";break;
case 5:n="wu";break;
case 6:n="liu";break;
case 7:n="qi";break;
case 8:n="ba";break;
case 9:n="jiu";break;
}
return n;
}
int main()
{
string n;//将数据存入字符串中
cin>>n;//输入数据
int sum=0;
for(int i=0;i<n.size();i++)//计算出各位数字之和
{
sum+=judge1(n[i]);
}
vector<string> v;//创建动态数组
while(sum!=0)
{
v.push_back(judge2(sum%10));//将数字所对应的字符串存入数组
sum=sum/10;
}
for(int i=v.size()-1;i>=0;i--)//输出
{
if(i==0)
cout<<v[i];
else
cout<<v[i]<<' ';
}
return 0;
}
柳神解法
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;//输入字符串中
int sum = 0; //数字之和
string str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
for (int i = 0; i < s.length(); i++)
sum += (s[i] - '0');
string num = to_string(sum);//将数字转换为字符串
for (int i = 0; i < num.length(); i++)
{
if (i != 0)
cout << " ";
cout << str[num[i] - '0'];
}
return 0;
}