题目描述
通过版本
#include <stdio.h>
int main(){
int n,sum=0;
while((n = getchar())!='\n'){//输入n
sum = sum + (n- '0'); //计算n各位数之和
}
if(sum==0){
printf("ling");
return 0;
}
char* pinyin[10] ={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
/*
逻辑是:通过整除10计算得出每一位的数字,对应得出汉字拼音
*/
int temp = 1,count = 0;
//计算数字之和的位数
while(temp<=sum){
temp = temp*10;
count++;
}
temp = temp/10;
while(count>0){
printf("%s",pinyin[sum/temp]);
sum = sum - (sum/temp)*temp;
temp = temp/10;
count--;
if(count>0)
printf(" ");
}
return 0;
}
dev-C++通过但平台没通过
#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
void read(char c){
switch(c){
case '0':
printf("ling");
break;
case '1':
printf("yi");
break;
case '2':
printf("er");
break;
case '3':
printf("san");
break;
case '4':
printf("si");
break;
case '5':
printf("wu");
break;
case '6':
printf("liu");
break;
case '7':
printf("qi");
break;
case '8':
printf("ba");
break;
case '9':
printf("jiu");
break;
}
}
int main(){
int n; //输入正整数n
cin>>n;
if(n<0) return 0;
char s[100];
sprintf(s,"%d",n);
int len=strlen(s);
int sum=0;//定义n每位数字相加之和
int temp;
for(int i=0;i<len;i++){
temp=(int)s[i]-48;//与acII码有关
sum+=temp;
}
char ss[100];
sprintf(ss,"%d",sum);
len=strlen(ss);
for(int i=0;i<len;i++){
read(ss[i]);
if(i!=len){
printf(" ");
}
}
return 0;
}
平台显示多种错误,确实逻辑上有些繁琐,第一种方法更好。
结果