題目內容:http://mooc.study.163.com/learn/ZJU-1000002011#/learn/ojhw?id=1000052000
你的程序要讀入一個整數,範圍是[-100000,100000]。然後,用漢語拼音將這個整數的每一位輸出出來。
如輸入1234,則輸出:
yi er san si
注意,每個字的拼音之間有一個空格,但是最後的字後面沒有空格。當遇到負數時,在輸出的開頭加上“fu”,如-2341輸出爲:
fu er san si yi
輸入格式:
一個整數,範圍是[-100000,100000]。
輸出格式:
表示這個整數的每一位數字的漢語拼音,每一位數字的拼音之間以空格分隔,末尾沒有空格。
輸入樣例:
-30
輸出樣例:
fu san ling
我的思路:
首先處理0,再對負數輸出"fu ",然後轉化成整數處理。
對每個整數,先模10得到個位再除以10循環處理,從個位到高位逐個剝離位值存儲在整數數組tmp[ ]。
然後從數組的最末位置往0位置開始處理,遇到第一個非0的數就“讀”出來,注意第一個讀出來的數字前面沒有空格。以後的數字讀出來之前都有空格輸出。
下面的代碼在處理-0056 這樣的輸入會有bug.
#include <stdio.h> int SIZE = 7; int main(){ char* say[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; int tmp[7]={0}; int in; scanf("%d",&in); //in = -30608; if(in == 0){ printf("%s",say[0]); return 0; } else if (in < 0){ printf("%s","fu "); in *= -1; } for(int i = 0;in>0;i++){ tmp[i] = in % 10; in /= 10; } int begin = 0; for(int i = SIZE-1;i >=0; i--){ if(tmp[i]==0&&!begin) continue; if(!begin){ begin = 1; printf("%s",say[tmp[i]]); continue; } if(begin){ printf(" %s",say[tmp[i]]); } } return 0; }