1. 程式人生 > 其它 >輸入一個整形數(最多可以到億位),然後按漢語的習慣,將其讀出來並輸出。如1052,讀作:一千零五十二。 程式執行示例: 1052 一千零五十二

輸入一個整形數(最多可以到億位),然後按漢語的習慣,將其讀出來並輸出。如1052,讀作:一千零五十二。 程式執行示例: 1052 一千零五十二

技術標籤:c語言c語言

輸入一個整形數(最多可以到億位),然後按漢語的習慣,將其讀出來並輸出。如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);//繼續判斷下一位 } }

求贊
贊