Pat B1002. 寫出這個數 (20)

讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裏保證n小於10100。

輸出格式:在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後一個拼音數字後沒有空格。

輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu

實現思路:
1.以字符串格式讀入數據,在將每個字符與字符‘0’相減得到字符對應的整數值,計算所有整數值的和。
2.將和的每一位用拼音打印出來,可以用取餘與除法得到和的每一位數字值。

錯誤記錄:
輸出時的和爲3位數時打印3個拼音,2位數時打印2個拼音,1位數時打印1個拼音。不能出現和爲6時打印“ling ling liu”,要打印成“liu”。前期的代碼在最高位爲0時將0打印出來了導致測試點2、3、4、5答案錯誤。

實現代碼:

#include<stdio.h>
void printNum(int n){
    switch(n){
        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:
            //printf("null");
            break;      
    }
}
int main(){
    int i = 0,sum=0;
    char num[101];
    scanf("%s",num);
    while(num[i]!='\0'){
        sum=sum+(num[i]-'0');
        i++;
    }
    //打印和 
    if(sum/100!=0){
        printNum(sum/100);
        printf(" ");
        sum=sum%100;
        printNum(sum/10);
        printf(" ");
        printNum(sum%10);
    }
    else{
        sum=sum%100;
        if(sum/10!=0){
            printNum(sum/10);
            printf(" ");
            printNum(sum%10);
        }
        else printNum(sum%10);
    }
    return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章