輸入一個整形數(最多可以到億位),然後按漢語的習慣,將其讀出來並輸出。如1052,讀作:一千零五十二。 程式執行示例: 1052 一千零五十二
阿新 • • 發佈:2021-01-05
輸入一個整形數(最多可以到億位),然後按漢語的習慣,將其讀出來並輸出。如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);//繼續判斷下一位
}
}
求贊