PTA 翁愷 7-30 念數字
阿新 • • 發佈:2021-10-18
輸入一個整數,輸出每個數字對應的拼音。當整數為負數時,先輸出fu
字。十個數字對應的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
輸入格式:
輸入在一行中給出一個整數,如:1234
。
提示:整數包括負數、零和正數。
輸出格式:
在一行中輸出這個整數對應的拼音,每個數字的拼音之間用空格分開,行末沒有最後的空格。如yi er san si
。
輸入樣例:
-600
結尾無空行
輸出樣例:
fu liu ling ling
結尾無空行
整體思路:
要將輸入的數字一位一位拆開放在數組裡,引入一個引數儲存位數,再用switch語句與陣列內容一一對應即可。負數和正數處理方法是一樣的,把負數變成正數,再用一個引數專門控制符號,陣列第一個元素與其對應。
整體程式碼:#include <stdio.h> #include <math.h> int main (void){ int input = 0; scanf ("%d",&input); int i = 0,ne = 10,wei = 0; int a[100] = {0}; if (input == 0){ printf ("ling"); return 0; } if (input < 0){ input = input * -1; ne = -1; }for (i = 0; i < 13; ++i){ if ((input >= pow(10,i)) && (input < pow(10,i+1))) wei = i + 1; } for (i = 1; i <= wei; ++i){ a [i] = input / pow(10,wei-i); input = input - a[i] * pow(10,wei-i); } a[0] = ne; for (i = 0;i < wei; ++i) {switch (a[i]){ case -1: printf ("fu "); break; case 0: printf ("ling "); break; case 1: printf ("yi "); break; case 2: printf ("er "); break; case 3: printf ("san "); break; case 4: printf ("si "); break; case 5: printf ("wu "); break; case 6: printf ("liu "); break; case 7: printf ("qi "); break; case 8: printf ("ba "); break; case 9: printf ("jiu "); break; case 10: break; } } switch (a[wei]){ case -1: printf ("fu"); break; case 0: printf ("ling"); break; case 1: printf ("yi"); break; case 2: printf ("er"); break; case 3: printf ("san"); break; case 4: printf ("si"); break; case 5: printf ("wu"); break; case 6: printf ("liu"); break; case 7: printf ("qi"); break; case 8: printf ("ba"); break; case 9: printf ("jiu"); break; case 10: break; } return 0; }
討論:
- 題目要求末尾不能出現空格,這裡的處理方法是將前幾位統一輸出,末尾帶上空格;最後一位單獨處理,末尾不帶空格,不知有無更好的處理方法。
- 0作為特殊情況,放在前半部分處理,碰到0輸出完直接退出函式
- 出現case對應時,如果不寫break,該case後面的所有case也會一起輸出。
- 拆數字是一段很典型的程式碼,在很多題目中都能夠用到。