1002 寫出這個數——C++實現
阿新 • • 發佈:2018-11-24
題目
1002 寫出這個數 (20 point(s))
讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:
每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10100。
輸出格式:
在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後一個拼音數字後沒有空格。
輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
演算法
由於輸入的字元長度很大,顯然不能使用數值型進行儲存。字元型儲存可以處理大量的字元。讀取之後,只需要將每一位的數字字元轉換成數字,進行累加即可。累加之後,將對應的數字形式轉化為字元,再直接和預定義的字串進行比對,輸出即可。主要考察的還是數字字元與數字本身之間的相互轉化。
程式碼
下面是學習過C++寫的程式碼
//1002 寫出這個數 v1 #include <iostream> #include <string> using namespace std; int main(){ string s; cin>>s; int sum=0; for(int i=0;i<s.length() ;i++) sum+=s[i]-'0'; string str=to_string(sum); string chaxun[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; for(int i=0;i<str.length() ;i++){ if(i) cout<<" "; cout<<chaxun[str[i]-'0']; } return 0; }
下面是隻學過C語言寫的程式碼,可以看出來C++字串的易用性。
//1002 #include <stdio.h> #define M 5 #define N 100 int main() { char numchar[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; //save the pinyin char array[N]; //save the user's input int index[M]; //save the sum's numbers int i=0,j,sum=0; for(i=0;i<M;i++) index[i]=-1; scanf("%s",array); i=0; while(array[i]!='\0'){ //count the sum sum+=array[i]-'\0'; i++; } j=0; while(sum>0){ //count bai shi ge index[j]=sum%10; sum=sum/10; j++; } for(i=M-1;i>=0;i--){ if(index[i]!=-1){ if(i==0) printf("%s",numchar[index[i]]); else printf("%s ",numchar[index[i]]); } } return 0; }