PAT_乙级 1002 写出这个数

来源:互联网 发布:帝国cms 分页代码 编辑:程序博客网 时间:2024/06/05 08:14

题目描述:

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


解题思路:

数值过大的数字可以使用字符数组储存。

代码部分:

#include<stdio.h>int main(void){char num[100]={0};int i=0,result,tem,tem100,tem10,tem1;//gets(num);while(gets(num)!=NULL){//计算各位数字之和;result=0;for(i=0;i<=100 && num[i]!='\0';i++){//printf("%d\n",num[i]);tem=num[i]-48;result=result+tem;} //printf("result is :%d\n",result);// 打印; tem100=result/100;//printf("tem100 is : %d\n",tem100);tem10=(result/10)%10;//printf("tem10 is : %d\n",tem10);tem1=result%10;//printf("tem1 is : %d\n",tem1);switch (tem100){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;//case 0:printf("ling ");}switch (tem10){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;case 0:if(tem100==0)<span style="white-space:pre"></span>break;printf("ling ");break;}switch (tem1){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;case 0:printf("ling");break;}printf("\n");}} 

可以改进部分:

打印汉字拼音可以使用一个二维数组储存10个字符串,通过tem数据作为第一维数组下标选择打印哪个数组。可以改善代码长度。下次补上


0 0