PAT乙 1002. 写出这个数 (20)

题目地址:PAT乙1002.写出这个数(20)

题目描述:

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

求解过程:

    通过自定义一个转换函数transfer来达到数字变拼音的效果,然后对个位数字求和,通过判断最终和的位数来分别输出结果。

程序:

#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;
string transfer(int x)
{	/* 把数字转换为拼音 */
	switch(x)
		{
			case 0: return "ling";
			case 1: return "yi";
			case 2: return "er";
			case 3: return "san";
			case 4: return "si";
			case 5: return "wu";
			case 6: return "liu";
			case 7: return "qi";
			case 8: return "ba";
			case 9: return "shi";
			default: break;
		}
}

int main()
{
	char ch[101];
	gets(ch);
	int sum = 0;
	int ge, shi, bai;	// 100位数最大和为999,所以就三位
	string g, s, b;
	for (int i = 0; *(ch+i) != '\0'; ++i)
	{	/* 遍历数组,数字0的ASCII码为48 */
		sum += *(ch+i)-48;	/* 减去48就是对应的数字 */
	}

	ge = sum%10;
	g = transfer(ge);

	if (sum >= 100)
	{	/* 如果sum大于100, 说明是三位数 */
		bai = sum / 100;
		shi = (sum%100) / 10;
		b = transfer(bai);
		s = transfer(shi);
		printf("%s %s %s\n", &b,&s,&g);
	}
	else if (sum < 100 && sum > 10)
	{	/* 如果是两位数 */
		shi = (sum%100) / 10;
		s = transfer(shi);
		printf("%s %s\n", &s,&g);
	}
	else
		printf("%s\n", &g);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值