1. 程式人生 > >PTA乙級刷題日誌---1002(20分)寫出這個數

PTA乙級刷題日誌---1002(20分)寫出這個數

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

輸入格式:

每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10​100​​。

輸出格式:

在一行內輸出 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)