输入一个整形数(最多可以到亿位),然后按汉语的习惯,将其读出来并输出。如1052,读作:一千零五十二。
程序运行示例:
1052
一千零五十二
999999999
九亿九千九百九十九万九千九百九十九
可能会有一些边界条件没有考虑到
最大到九亿九千九百九十九万九千九百九十九
下面是代码,解析写在注释里了
#include <stdio.h> #include <string.h> #include <stdlib.h> const char shuzi[10][4] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; const char weishu[5][4] = {"十", "百", "千", "万", "亿"}; //储存中文数字 void read(char *str); int count=0,len; int main() { char str[11] = {'0'};//初始化字符串 scanf("%s", str + 1); len=strlen(str); read(str + 1); return 0; } void read(char *str) { if (strlen(str) == 0) { return; } else { switch (str[0])//分别判断每一位的读法 { case '0': if (str[1] != '0' && strlen(str) >= 2) printf("%s", shuzi[0]); //0的情况比较特殊,多个0位只读一遍 break; case '1': if (strlen(str) != 2 && strlen(str) != 6) printf("%s", shuzi[1]); else if (*(str - 1) != '0') printf("%s", shuzi[1]); break; case '2': printf("%s", shuzi[2]); break; case '3': printf("%s", shuzi[3]); break; case '4': printf("%s", shuzi[4]); break; case '5': printf("%s", shuzi[5]); break; case '6': printf("%s", shuzi[6]); break; case '7': printf("%s", shuzi[7]); break; case '8': printf("%s", shuzi[8]); break; case '9': printf("%s", shuzi[9]); break; default: return; } switch (strlen(str)) { case 9: printf("%s", weishu[4]); break; case 8: if (str[0] != '0') printf("%s", weishu[2]); break; case 7: if (str[0] != '0') printf("%s", weishu[1]); break; case 6: if (str[0] != '0') printf("%s", weishu[0]); break; case 5: break; case 4: if (str[0] != '0') printf("%s", weishu[2]); break; case 3: if (str[0] != '0') printf("%s", weishu[1]); break; case 2: if (str[0] != '0') printf("%s", weishu[0]); break; case 1: break; default: return; } count++; if((len-count==5)&&(len>4)) printf("%s", weishu[3]); read(++str);//继续判断下一位 } }