悲催的码农
问题 : 悲催的码农
题目描述
小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;
}
还没有评论,来说两句吧...