藍橋杯 基礎練習 數的讀法
基礎練習 數的讀法
時間限制:1.0s 記憶體限制:512.0MB
問題描述
Tom教授正在給研究生講授一門關於基因的課程,有一件事情讓他頗為頭疼:一條染色體上有成千上萬個鹼基對,它們從0開始編號,到幾百萬,幾千萬,甚至上億。
比如說,在對學生講解第1234567009號位置上的鹼基時,光看著數字是很難準確的念出來的。
所以,他迫切地需要一個系統,然後當他輸入12 3456 7009時,會給出相應的念法:
十二億三千四百五十六萬七千零九
用漢語拼音表示為
shi er yi san qian si bai wu shi liu wan qi qian lingjiu
這樣他只需要照著念就可以了。
你的任務是幫他設計這樣一個系統:給定一個阿拉伯數字串,你幫他按照中文讀寫的規範轉為漢語拼音字串,相鄰的兩個音節用一個空格符格開。
注意必須嚴格按照規範,比如說“10010”讀作“yiwan ling yi shi”而不是“yi wan ling shi”,“100000”讀作“shi wan”而不是“yi shi wan”,“2000”讀作“er qian”而不是“liang qian”。
輸入格式
有一個數字串,數值大小不超過2,000,000,000。
輸出格式
是一個由小寫英文字母,逗號和空格組成的字串,表示該數的英文讀法。
樣例輸入
1234567009
樣例輸出
shi er yi san qian si bai wu shi liu wan qi qian ling jiu
1、 char* num和char num的區別在於:char* num是一個返回char型的指標num可以賦值為一個字串或一個字元,只要是一個字元型的地址就可以了
而char num只表示一個字元num,只能等於一個字元如’a’。
2、 我們用陣列str裝載最後的輸出結果,i值表徵第i位,控制位的讀法,而j表示str陣列中的第j個元素
3、 輸出中的if語句是為了使‘10’開頭時的讀法是‘shi’,而不是‘yi shi
4、 畫出演算法演算法流程圖比較好理解,也可以以‘1234567009’這個數字為例思考演算法
c:
#include<stdio.h>
int main()
{
char*num[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char*wei[]={"shi","bai","qian","wan","yi"};
char*str[20];
inti,j,k,n,l[2]={0};
i=0;j=0;
scanf("%d",&n);
while(n>0)
{
k=n%10;
n/=10;
if(k>0)
{
if(i>0)
{
if(i>=4&&!l[i/4-1])
{
l[i/4-1]=1;
str[j++]=wei[i/4+2];
}
if(i%4!=0)str[j++]=wei[i%4-1];
}
str[j++]=num[k];
}
elseif(j>0&&str[j-1]!=num[0])
{
str[j++]=num[0];
}
i++;
}
if(!(str[j-1]=="yi"&&j>1&&str[j-2]=="shi"))
printf("%s",str[j-1]);
for(i=j-2;i>=0;i--)
printf("%s",str[i]);
return0;
}