1. 程式人生 > 其它 >PTA 翁愷 7-30 念數字

PTA 翁愷 7-30 念數字

輸入一個整數,輸出每個數字對應的拼音。當整數為負數時,先輸出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也會一起輸出。
  • 拆數字是一段很典型的程式碼,在很多題目中都能夠用到。