初学者。
题目如下
代码如下
#include<iostream>
#include<math.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
char * hanyu(int a);
char * hanyu1(int a);
static char r[100];
int main()
{
int n;
int sum=0;
double p=pow(10,100);
cin>>n;
if(n>p) cout<<"输入错位";
else
while(n!=0){
sum+=n%10; // 计算其各位数字之和
n/=10;
}
cout<<sum<<endl; // 检查结果
int a;
int mid=sum; //辅助计算的中间量
for(a=0;mid>0;a++){ //计算结果的位数
mid/=10;
}
cout<<a<<endl;
int x=pow(10,a-1); // 设置一个10的a次方用来取最高位数字
int res; //中间量
while(sum>0){
res=sum/x; // 取最高位数字
cout<<hanyu(res); // 输出最高位数字拼音
sum=sum%x; // 去掉最高位数字
x/=10;
if(sum<10) { //最后一位拼音去掉后面空格
cout<<hanyu1(sum);
sum/=10;
}
}
}
char * hanyu(int a)
{
switch(a){
case 1:
strcpy(r,"yi ");
break;
case 2:
strcpy(r,"er ");
break;
case 3:
strcpy(r,"san ");
break;
case 4:
strcpy(r,"si ");
break;
case 5:
strcpy(r,"wu ");
break;
case 6:
strcpy(r,"liu ");
break;
case 7:
strcpy(r,"qi ");
break;
case 8:
strcpy(r,"ba ");
break;
case 9:
strcpy(r,"jiu ");
break;
case 0:
strcpy(r,"ling ");
break;
}
return r;
}
char * hanyu1(int a)
{
switch(a){
case 1:
strcpy(r,"yi");
break;
case 2:
strcpy(r,"er");
break;
case 3:
strcpy(r,"san");
break;
case 4:
strcpy(r,"si");
break;
case 5:
strcpy(r,"wu");
break;
case 6:
strcpy(r,"liu");
break;
case 7:
strcpy(r,"qi");
break;
case 8:
strcpy(r,"ba");
break;
case 9:
strcpy(r,"jiu");
break;
case 0:
strcpy(r,"ling");
break;
}
return r;
}
结果只能正确计算到n为9位数的,结果如下
如果n超过了9位数后就错误了,如下
麻烦各位大佬帮忙看看问题出在哪里,谢谢