什么是浮点错误,求解答

 这是翁恺大大的“念数字”

img

我的作答如下

#include <stdio.h>
int main(){
    int x=0;
    int cnt=1;
    int m=0;
    
    scanf("%d",&x);
    
    if(x<0){
       x=-x;
       printf("fu ");
    }
    
    int t=x;
    
    while(t>9){
        t/=10;
        cnt*=10;
    
    }
    
    
    
    while(x>=0){
        m=x/cnt;
        x%=cnt;
        cnt/=10;
        
        
        switch(m){
            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(cnt!=0){
            printf(" ");
        }
    }
    
    
    
    return 0;
} 

在网页外的编译器dev 里运行没有任何问题,复制到答题区后出现如下的问题

img

 将while(x>=0)改成(x>0)后,出现了部分正确

求带老帮我看一下问题出在哪里?

谢谢

【以下回答由 GPT 生成】

我很抱歉,但您没有提供任何具体的问题。请详细说明您的问题,我将尽力提供解决方案和代码示例。


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

根据搜索的链接,浮点错误应该是发生了除0错误;

然后,代码将计算权值和提取数字每一位的部分修改下,以及增加对输入为0的情况处理下即可。

修改如下:

参考链接:


#include <stdio.h>
#include <math.h> 
int main() {
    int x=0;
    int cnt=1;
    int m=0;

    scanf("%d",&x);

    if(x<0) {
        x=-x; 
        printf("fu ");
    }

    int t=x;
    // 计算x最高位的权值,即最高位是最高位数数字 乘以 10的几次方 
    while(t>10) {
        t/=10;
        cnt*=10; 
    }
//    printf("cnt=%d,x=%d\n",cnt,x);
    
    // 如果x等于0,则输出"ling" 
    if (x==0){
        printf("ling");
    }

  // https://blog.csdn.net/guomengkai/article/details/88088173
  // 如果x大于0,则循环获取x的每一位数字,直到其为0 
    while(x>0) {
        m=x/cnt%10;  // 从最高位开始提取每一位的数字 
        //x%1=cnt;
        
        //printf("m=%d,x=%d,cnt=%d\n",m,x,cnt);    
        cnt/=10;  // 下一位数字的权值除以10 
        
        

        switch(m) {
            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(cnt!=0) {  // 如果没到最后一位,则每一位数字后,打印一个空格 
            printf(" ");
        }else{  // 如果计算完最后一位数字, 则退出循环 
            break;
        }
        printf("\n");
    }


    return 0;
}


img