PAT-乙级-1002.写出这个数

题目

读入一个正整数 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; 
}

发布了83 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Yk_0311/article/details/104071803
今日推荐