#include<stdio.h>
int main()
{
int n;
int s;
int i;
scanf("%d",&n);
if(n<0){
printf("fu ");
n=-n;
}
if(n<10){
switch(n){
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;
}
return 0;
}
int mask=1;
for(int t=n;t>9;t/=10){
mask*=10;
}
do{
int s=n/mask;
i%=mask;
mask/=10;
switch(s){
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;
}
if(i<10){
switch(i){
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;}
}
}while(mask>9);
return 0;
}
你要的按字符串处理的方法,这个挺好理解的,你看看能不能通过测试吧,不行的话给我看看什么样例过不了
#include <stdio.h>
#include <string.h>
int main()
{
char s[15]; //最长处理15个字符
int i;
scanf("%s", &s);
for(i = 0; i<strlen(s); i++){ //遍历整个字符串
switch(s[i]){
case '-': printf("fu"); 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;
case '0': printf("ling"); break;
}
if(i != strlen(s) - 1) //如果不是最后一个字符,后面要输出空格
printf(" ");
}
return 0;
}
你出错的例子是哪一个输入?
先说一下,这个题呢,可能当作字符串处理会更简单喔~
至于你的代码我看看再说
我只改了你的do-while循环,你那里写的有一点点混乱,你可以看看现在这个你能不能懂,我测了四五个数据都是正确的,你试试能不能过
#include<stdio.h>
int main()
{
int n;
int s;
int i;
scanf("%d",&n);
if(n<0){
printf("fu ");
n=-n;
}
if(n<10){
switch(n){
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;
}
return 0;
}
int mask=1;
for(int t=n;t>9;t/=10){
mask*=10;
}
do{ //你原来的计算方法有一点问题,我改了,你好好看看s i n mask的取值
int s=n/mask;
i=n%mask;
n%=mask; //增加了这个,你不懂可以问
mask/=10;
switch(s){
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;
}
}while(mask>0); //注意这里
return 0;
}
供参考:
#include <stdio.h>
int main()
{
char* num[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
char c[100] = { 0 };
int i = 0;
scanf("%s", c);
for (i = 0; c[i] != '\0'; i++)
printf(i == 0 && c[i] == '-' ? "fu" : i == 0 ? "%s" : " %s", num[c[i] - '0']);
return 0;
}