pta7-25念数字 改了好几遍都只对了两个测试点 耗在这一个小时了 实在不晓得咋改了 希望各位可以看看哪里不对

img

img

#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;
}

img

你出错的例子是哪一个输入?

先说一下,这个题呢,可能当作字符串处理会更简单喔~
至于你的代码我看看再说

只改了你的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;
}

img

供参考:

#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;
}