码迷,mamicode.com
首页 > 其他好文 > 详细

PAT(Basic Level)practice1002

时间:2015-12-01 22:46:41      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

 写出这个数

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

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

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

这道题首先要明白n的范围已经超过了普通的类型,所以肯定要利用字符数组来进行处理。
其次在求得和之后,输出有两种方法,如果是用sprintf较为简单,但另一种方法也应当掌握。即相当于知道结果的位数,然后除以10的n次方从而得到每一位的值。
#include <stdio.h>

void outPut(int sum)
{
	int k = 1;
	int ans;
	int t = sum;
	while (sum > 9)      //判断和的位数 
	{
		k *= 10;
		sum /= 10;
	}
/*之前不知道有sprintf这个函数,用这个会简便很多,就不用这样求每一位了
spsprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。
最常用的就是把整数打印到字符串中*/	
	while (k > 0)        //分别计算每一位 
	{
		ans = t / k;
		t %= k;
		k /= 10;
		
		switch (ans)
		{
			case 0:
				printf ("ling");
				break;
			case 1:
				printf ("yi");
				break;
			case 2:
				printf ("er");
				break;
			case 3:
				printf ("san");
				break;
			case 4:
				printf ("si");
				break;
			case 5:
				printf ("wu");
				break;
			case 6:
				printf ("liu");
				break;
			case 7:
				printf ("qi");
				break;
			case 8:
				printf ("ba");
				break;
			case 9:
				printf ("jiu");
				break;
		}
		if (k > 0) printf (" ");
	}
}

int main ()
{
	char c[101] = {0};
	gets (c);
	int i = 0,sum = 0;
	while (c[i] != ‘\0‘)
	{
		sum += c[i] - ‘0‘;
		i ++;
	}
	outPut (sum);
//	printf ("%d",sum);

	return 0;
}

  



PAT(Basic Level)practice1002

标签:

原文地址:http://www.cnblogs.com/annfly/p/5011406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!