<center>

问题 : 悲催的码农


</center>

题目描述

小A在学校不好好学习,天天忙着玩。四年很快过去,好不容易找了份工作,其实就是码代码的底层码农。看着到手的工资,小A很是失望。一方面后悔过去,另一方面羞于启齿。我们要做的一是引以为戒,二是大声地替小A把工资读出来,不过注意不要带口音噢!
应该用标准的汉语,即“零”“壹”“贰”“叁”“肆”“伍”“陆”“柒”“捌”“玖”“拾”“佰”“仟”来读。
编程时请这样定义:
char s1[10][4]={“零”,“壹”,“贰”,“叁”,“肆”,“伍”,“陆”,“柒”,“捌”,“玖”}
char s2[3][4]={“拾”,“佰”,“仟”}

输入

一个整数n(0<n<5000)

输出

这个数字的中文读法

样例输入

1111
1001

样例输出

壹仟壹佰壹拾壹
壹仟零壹

题意描述:

输出5000以内的所有整数的中文读法。

解题思路:

将汉字存储到字符数组中,将这个数以字符串形式存储,从数的右边开始读,若不为‘0’读出数并读出数的位,若为‘0’跳转循环直到遇到下个不为‘0’位读出零,若一直到最后都为‘0’,当判断到最后一位时,输出换行。(注意汉字输出格式用%s,且储存时占了四个字符;注意位数输出的判断)

程序代码:

#include<stdio.h>
#include<string.h>
int main()
{
	//存储汉字 
	char s1[10][4]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	char s2[3][4]={"拾","佰","仟"}; 
	char a[10];
	int i,len,h;
	while(gets(a)!=NULL)
	{
		h=0;//用于判断是否此位的前面有'0' 
		len=strlen(a);
		for(i=0;i<len;i++)
		{
			if(a[i]=='0')
			{
				if(i==(len-1))//当最后一位为'0'时,直接输出换行 
				{
					printf("\n");
				//	break;
				}
				h=1;//若此位有'0'标记,并跳转 
				continue;	
			}
			if(h==1&&a[i]!='0')//若此位前面是'0',且它不为'0'输出‘零’ 
			{
				printf("%s",s1[0]);
				h=0;//并将标记重新置0 
			}
			if(h==0&&a[i]!='0'&&i!=(len-1))//若此位不为'0'且不是最后一位输出此位数及它的位 
			{
				printf("%s",s1[a[i]-'0']);
                  printf("%s",s2[len-i-2]);
			}
			//最后一位不为'0'并换行 
			if(a[i]!='0'&&i==(len-1))
			{
				printf("%s",s1[a[i]-'0']);
                         }
                         if(i==(len-1))
				printf("\n");
		}
	}
	return 0;
}