1002 寫出這個數 (20)(20 分)
讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小于10^100^。
輸出格式:在一行内輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後一個拼音數字後沒有空格。
輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
思路
簡單三個套路,上代碼
AC代碼
#include<stdio.h>
#include<string.h>
int main(){
char str[102];
scanf("%s",str);
int len=strlen(str);
int n,sum=0,num=0;
int ans[4];
for(int i=0;i<len;i++){
n=str[i]-'0';
sum+=n;
}
while(sum!=0){
ans[num++]=sum%10;
sum/=10;
}
/*定義二維字元數組來儲存*/
char pinyin[10][5]= {
"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"
};//這裡10字元數組空間,5字元串空間(帶的)
for(int i=num-1;i>=0;i--){
printf("%s", pinyin[ans[i]]);//當做字元串輸出
if(i!=0)
printf(" ");
else
printf("
");
}
return 0;
}
别人的AC代碼
to_string()
函數真是太棒了
#include<bits/stdc++.h>
using namespace std;
int main(void){
string s;
cin >> s;//讀入一個字元串,更快
int sum = 0;
string str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};//一個字元串數組,天然
for (int i = 0; i < s.length(); i++)
sum += (s[i] - '0');
string num = to_string(sum);
for (int i = 0; i < num.length(); i++) {
if (i != 0) cout << " ";
cout << str[num[i] - '0'];
}
return 0;
}