c语言pat基础题改错0815L1007

img

img


#include<stdio.h>
int main(){
    int N;
    scanf("%d\n",&N);
    if(N<0){
        printf("fu ");
        N=-N;
    }
    int flag=0;
    for(;N!=0;){
        N/=10;
        flag++;
    }
    int num[flag];
    for(int i=flag-1;i>=0;i++){
        num[i]=N%10;
        N/=10;
    }
    for(int i=0;i<flag;i++){
        switch(num[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;
            default:
                ;
        }
    }
}

我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!

从输入获取一个值,scanf()里面的换行符可以去掉;

操作N前,先将N的值先备份下,然后后面每次操作N可以再恢复为输入时的值;

然后还有其他地方稍微修改下即可。

修改如下:


  
#include<stdio.h>
int main(){
    int N;
    scanf("%d",&N); // 从输入获取一个整数,scanf里面的'\n'不需要 
    
    if(N<0){
        printf("fu ");
        N=-N;
    }
    int temp=N; // 对N进行操作前,先备份N的值 
  //  printf("0\n"); 
    int flag=0;
    for(;N!=0;){
        N/=10;
        flag++;
    }
   // printf("1\n"); 
    int num[flag];
    N=temp;  // 将N的值恢复为输入时的值 
    for(int i=flag-1;i>=0;i--){
        num[i]=N%10;
        N/=10;
    }
    //printf("2\n"); 
    for(int i=0;i<flag;i++){
        switch(num[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;
            default:
                ;
        }
        // 当不是最后一位数字时,每个数字打印一个空格 
         if (i!=(flag-1)){
             printf(" ");
         }   
    }
    
    N=temp;
    // 如果输入的值为0,单独打印一个"ling" 
    if(N==0){
        printf("ling");
    }
    
}



img

【以下回答由 GPT 生成】

#include <stdio.h>

void printChineseNumber(int num) {
    int flag = 0;
    int tempNum = num;
    if (tempNum == 0) {
        printf("ling ");
        return;
    }
    if (tempNum < 0){
        printf("fu ");
        tempNum = -tempNum;
    }
    while (tempNum != 0) {
        tempNum /= 10;
        flag++;
    }
    int power = flag - 1;
    int divisor = 1;
    for (int i = 0; i < power; i++) {
        divisor *= 10;
    }
    while (divisor != 0) {
        int digit = num / divisor;
        switch(digit) {
            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;
        }
        num %= divisor;
        divisor /= 10;
    }
}

int main(){
    int N;
    scanf("%d", &N);
    printChineseNumber(N);
    return 0;
}

在这个修改后的代码中,我定义了一个新的函数printChineseNumber来实现逐位输出整数的中文数字。首先,我添加了对0和负数的特殊情况处理。然后,使用循环和运算符来计算整数的位数和每一位上的值,通过除法和取模运算来获取到每一位的数字,并使用switch语句将数字转换为对应的中文数字进行输出。最后,在主函数中调用printChineseNumber函数来实现逐位输出整数的中文数字。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^