1002. 寫出這個數 (20)-PAT乙級真題
阿新 • • 發佈:2021-01-06
- 自己寫程式碼
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char a[100]; //?101
char py[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
char b;int i=0;
// while(cin>>b){
// a[i++]=b;
// }
cin>>a;
int n=strlen(a); //char一個位元組,否則n=strlen(a)/strlen(a[0]);
int sum=0;
for(int i=0;i<n;i++){ //位數和
sum+=(a[i]-'0');
}
char shuchu[4];
int j=0;
while(sum){
shuchu[j++]=sum%10+'0'; //尾到頭,逆序輸入,int轉為字元型char
//因為整型會預設後面為0,這樣n一定為4
sum/=10;
}
n=strlen(shuchu);
for(int i=n-1;i>=0;i--)
{
cout<<py[shuchu[i]-'0']; //碟中諜
if(i>0) cout<<" ";
}
return 0;
}
總結分析:
水平不夠,寫複雜了。有個測試點2沒過(搞不懂為什麼)
-
直接使用string型,無需定義char陣列更方便,to_string(sum)直接把int轉為string型;n=num.length(),無需n=strlen(字串);位數和sum在int和char之間轉換:sum%10+‘0’;, shuchu[i]-‘0’;
-
求陣列長度:char型:strlen()函式,sizeof(a)/sizeof(a[0]),sizoef()不適合int型陣列,不能求出真正的陣列長度。eg:int a[10];只給前六賦值,這樣編譯器預設後四個為0,用sizeof(a)/sizeof(a[0]);得到10,而不是4.
-
定義字元型二維陣列,用string比 cahr [][]好用簡便。
for(int i=0;i<num.length();i++){
if(i>0) cout<<" "; //從高位到低位,故先if後輸出資料;低位到高位則相反
cout<<py[num[i]-'0'];
}
網上找程式碼
#include <iostream>
#include <string>
using namespace std;
int main() {
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;
}