題目描述:數組
讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。 輸入格式: 每一個測試輸入包含 1 個測試用例,即給出天然數 n 的值。這裏保證 n 小於 10100。 輸出格式: 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後一個拼音數字後沒有空格。 輸入樣例: 1234567890987654321123456789 輸出樣例: yi san wu
本人AC代碼: 函數
// Get the number to Chinese // 計算給出的數字的和並輸出結果的漢語拼音 # include <stdio.h> int main(void) { // 記錄大型整數的數組 char NUM[1000]; // 用一個整數記錄各位之和 int sum = 0; // 表示每一位對應的漢語拼音 // 這裏用 switch 函數輸出結果便可 // 用一個數組來表示分解後的整數 int flag[4] = {-1, -1, -1, -1}; int i = 0; scanf("%s",NUM); // 用一個字符串記錄大型整數 // 把字符串轉化爲整數(實際不用操做) 並求和 while (NUM[i] != '\0') { sum += NUM[i] - '0'; i++; } // 把sum轉化爲漢語拼音 // 從最高位向下依次讀取 // 此處必須使用的是sum 的位數計算 而不是原來大型整數的位數i // 計算sum 的每一位 (用一個數組來表示) // 如123 在數組中表示爲 3 2 1 -1 i = 0; while (sum >= 10) { flag[i] = sum%10; sum = sum/10; i++; } sum = sum - (sum/10); flag[i] = sum; // printf("%d\n",i); // printf("%d %d %d %d",flag[0], flag[1], flag[2], flag[3]); for (i=3; i>=0; i--) { if (flag[i] != -1) { // 注意 此處的flag[i] 是整數類型 不能用符號表示 switch (flag[i]) { 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 0: printf("ling");break; default: break; } if (i>0) printf(" "); } } return 0; }