PAT(Basic Level) Practice——1002 寫出這個數
阿新 • • 發佈:2018-11-24
原題目:
讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10^100^。
輸出格式:在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後一個拼音數字後沒有空格。
輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
分析:
- 對於最大為10的100次方的大數,普通的方式不好儲存,我們採用字串儲存。【gets(ch);】
- 由於字符采用ASC II 碼值的儲存方式,每位數字字元減去字元0的ASC II 碼值即可即可得到每位的數值,再求和即可求得各位數字之和。
- 輸入之數每位數字最大之和不超過900,故可以省力直接將和的百十個位直接分解,若其他題目可能出現較大數,可採用陣列儲存每位的數。
- 對於百位和十位有可能出現0的情況進行討論,個位則可以直接在最後列印
百位 | 十位 | 處理 |
為0 | 為0 | 無操作 |
為0 | 非0 | 列印十位 |
非0 | 為0 | 依次列印百位十位 |
非0 | 非0 | 依次列印百位十位 |
5.每個數字的中文儲存成字串陣列,最後直接呼叫列印,注意每個中文數字後有空格,但最後一個沒有。
程式碼:
C語言版:
#include <stdio.h> #include <string.h> int main() { //用於儲存輸入的數,直接存為字串 char ch[101]; //將中文數字直接儲存為字串陣列,需要時直接使用,從0開始到9,方便呼叫,因為陣列下標從0開始 char Num[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; int i,j,k,p=0; gets(ch); for(i=0;i<strlen(ch);i++) { //將字串中的每一位減去字元'0'的ASC ii碼值,即可得到每一位的大小,並與之前的數求和儲存 p+=ch[i]-'0'; } //直接分解,百位為i,十位為j,個位為k,也可以採用陣列儲存 i=p/100; j=(p/10)%10; k=p%10; //分情況處理,列印結果 if(i==0&&j==0) { // } else if(i==0&&j!=0) { printf("%s ",Num[j]); } else { printf("%s ",Num[i]); printf("%s ",Num[j]); } printf("%s",Num[k]); return 0; }