- 自己写代码
#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;
}