1082 Read Number in Chinese (25分)
阿新 • • 發佈:2021-01-14
技術標籤:備戰2021/3/13PAT
這個題的難點在於對前導零的處理,具體的處理思路如下:
如果有前導0就要考慮前面有沒有數,如果有數
就要讀,如果沒數不讀前導零且當前讀的數字是第一
個。若沒有前導零,考慮前面有無數,有數的話輸出空格
沒數的話不輸出空格 。其中有無數用flag標識,flag==1為有數。
#include<cstdio> char pinyin[10][5]={"ling","yi","er","san","si", "wu","liu","qi","ba","jiu"}; void printDanwei(int i) { if(i==0) printf(" Qian"); if(i==1) printf(" Bai"); if(i==2) printf(" Shi"); } /*如果有前導0就要考慮前面有沒有數,如果有數 就要讀,如果沒數不讀前導零且當前讀的數字是第一 個。若沒有前導零,考慮前面有無數,有數的話空格 沒數的話沒用空格 */ int main() { int a; int fu=0; scanf("%d",&a); if(a<0){ printf("Fu"); fu=1; a = -a; } int Yi=0; int Wan[4]={0}; int Ge[4]={0}; for(int i=3; i>=0; i--){ Ge[i] = a%10; a/=10; } for(int i=3; i>=0; i--){ Wan[i] = a%10; a/=10; } Yi = a; int flag = 0;//說明此時前面沒數字 int pre0 = 0;//說明此時無前導零 if(Yi!=0){ flag=1; if(fu==1) printf(" "); printf("%s Yi",pinyin[Yi]); } for(int i=0; i<4; i++){ if(Wan[i]==0) pre0=1; else{ if(pre0==1){ if(flag==1){ printf(" ling"); printf(" %s",pinyin[Wan[i]]); printDanwei(i); } else{ if(fu==1) printf(" "); printf("%s",pinyin[Wan[i]]); printDanwei(i); flag=1; } } else{ if(flag==1){ printf(" %s",pinyin[Wan[i]]); printDanwei(i); } else{ if(fu==1) printf(" "); printf("%s",pinyin[Wan[i]]); printDanwei(i); flag=1; } } pre0 = 0;//前導零沒了 } } for(int i=0; i<4; i++){ if(Wan[i]!=0){ printf(" Wan"); break; } } pre0 = 0; for(int i=0; i<4; i++){ if(Ge[i]==0) pre0=1; else{ if(pre0==1){ if(flag==1){ printf(" ling"); printf(" %s",pinyin[Ge[i]]); printDanwei(i); } else{ if(fu==1) printf(" "); printf("%s",pinyin[Ge[i]]); printDanwei(i); flag=1; } } else{ if(flag==1){ printf(" %s",pinyin[Ge[i]]); printDanwei(i); } else{ if(fu==1) printf(" "); printf("%s",pinyin[Ge[i]]); printDanwei(i); flag=1; } } pre0 = 0;//前導零沒了 } } if(flag==0) printf("ling"); }