1. 程式人生 > 其它 >1002. 寫出這個數 (20)-PAT乙級真題

1002. 寫出這個數 (20)-PAT乙級真題

技術標籤:pat乙級演算法c++

題目地址

  1. 自己寫程式碼
#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沒過(搞不懂為什麼)

  1. 直接使用string型,無需定義char陣列更方便,to_string(sum)直接把int轉為string型;n=num.length(),無需n=strlen(字串);位數和sum在int和char之間轉換:sum%10+‘0’;, shuchu[i]-‘0’;

  2. 求陣列長度:char型:strlen()函式,sizeof(a)/sizeof(a[0]),sizoef()不適合int型陣列,不能求出真正的陣列長度。eg:int a[10];只給前六賦值,這樣編譯器預設後四個為0,用sizeof(a)/sizeof(a[0]);得到10,而不是4.

  3. 定義字元型二維陣列,用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;
}