PTA乙級刷題日誌---1002(20分)寫出這個數
阿新 • • 發佈:2018-11-11
讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:
每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10100。
輸出格式:
在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後一個拼音數字後沒有空格。
輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
思路:
- 輸入一個數後,先要計算它的各個數的和。
- 如果使用整型來處理會非常麻煩,我弄了半天,後面有一個死衚衕怎麼也走不出去,也是頭鐵....
- 然後看了下別人的思路,才知道有方法可以計算字元各位數的和。
- 計算出和後,翻譯成相應的拼音。
- 採用迴圈除10再取餘將各個數得到並存在一個數組中。
- 翻譯成拼音時有個技巧。因為陣列中存的是0-9的數,像我這種小白一定會遍歷陣列,每次遍歷用一次switch-case。但是可以定義一個翻譯元陣列(我取的名字...),將取餘完成後得到的陣列中的數作為翻譯陣列的索引就行了。
- 之前也考慮過每取一次餘便輸出一個數,因為我的演算法是先取餘得到個位數再除10,但是,這樣是反的....如果先得到最大位數......emmm...很麻煩吧,比如,要先知道這個數有幾位.......。
程式碼:
#include<stdio.h> #include<string.h> #include <stdlib.h> void print_sum(int n){ char *name[] ={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"}; int a[10];//儲存sum每位的數 int i=0; for(i=0;n>=10;i++){ a[i]=n%10; n=n/10; } a[i++]=n;//先賦值再加 while(i--){ //先判斷再減 if(i!=0){ printf("%s ",name[a[i]]);//將數作為下標的到相應的字元 }else{ printf("%s\n",name[a[i]]); } } } int main(){ char s[100]; char *n=s; scanf("%s",s); int sum=0; //用字元計算總和。 while(*n!='\0'){ sum=sum+(*n-'0'); n++; } print_sum(sum); }
參考:https://blog.csdn.net/u012792707/article/details/51730015
打卡:2018.10.16(1/5)