1. 程式人生 > >C語言學習記錄(3)

C語言學習記錄(3)

C語言學習記錄

Mooc上C語言練習

念整數

題目內容: 你的程式要讀入一個整數,範圍是[-100000,100000]。然後,用漢語拼音將這個整數的每一位輸出出來。 如輸入1234,則輸出: yi er san si 注意,每個字的拼音之間有一個空格,但是最後的字後面沒有空格。當遇到負數時,在輸出的開頭加上“fu”,如-2341輸出為: fu er san si yi 輸入格式: 一個整數,範圍是[-100000,100000]。 輸出格式: 表示這個整數的每一位數字的漢語拼音,每一位數字的拼音之間以空格分隔,末尾沒有空格。 輸入樣例: -30 輸出樣例: fu san ling 時間限制:500ms記憶體限制:32000kb

解題: 先分析i的值,注意i等於0時的輸出。i為負數時應該如何處理。 分析如何正序的得到i的每個數。 如何確定空格加的時機。 輸出比較簡單,得到後直接用swith輸出。

#include <stdio.h>

int main(int argc, char **argv) {
    int i,x,d,mask=1;
    scanf("%d",&i);
    
    if(i==0)
    {
        printf("ling");
    }else if(i>0)
    {
        x=i;
        while(x>9)
        {
            x/=10;
            mask*=10;
        }
        //printf("%d\n",mask);
do{ d=i/mask; i%=mask; mask/=10; switch(d){ 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; } if(mask>0) { printf(" "); } }while(mask>0); }else { printf("fu "); i = -i; x=i; while(x>9) { x/=10; mask*=10; } //printf("%d\n",mask); do{ d=i/mask; i%=mask; mask/=10; switch(d){ 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; } if(mask>0) { printf(" "); } }while(mask>0); } return 0; }

注意: 1. i等於0時的輸出應為一個定值,i小於0時應先轉為正整數,同時結果加個"fu"輸出。 2. 加空格的條件的變數應為mask。 3. 第二個while迴圈結束判斷條件應為mask變數