「已注销」 2023-09-19 22:16 采纳率: 62.5%
浏览 10

我写的这个在数字中插入千分位分隔符有啥问题吗?

img


有四组数据,其中三组都过了但是最后一组不知道为啥死活过去不去,不知道啥原因

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 00:38
    关注

    【以下回答由 GPT 生成】

    问题可能存在的地方有以下几个: 1. C没有被正确初始化。在当前的代码中,C变量被赋值为0,然后再每次循环时与b[i] * pow(10, i)相加。由于C没有被正确初始化,所以最后的结果很可能是错误的。应该在第一个循环前,将C初始化为a的最高位数,并在每次循环末尾将C累加为b[i] * pow(10, i) 2. 数组b的大小被设置为100,但是没有确认输入的整数不会超过100位。这可能导致数组越界的问题。建议在输入之前进行验证或者考虑使用动态内存分配。 3. 第二个do-while循环中,判断条件i != 1可能是有问题的。在最后一次循环结束后,i的值被减为1,但是循环中的代码是在条件判断之前执行的,所以循环中的代码可能不会执行。建议将循环条件改为i >= 1来确保循环可以执行到最后一次。 4. 在插入千分位的地方,应该从最高位开始插入,而不是从最低位开始插入。在当前的代码中,每次都是从最低位开始插入千分位分隔符。这可能导致最后结果的千分位分隔符位置不正确。应该将第二个do-while循环的判断条件改为当i的值是正好被3整除时,才插入千分位分隔符。 5. pow()函数返回的是一个double类型的浮点数,但是在当前的代码中,结果被赋值给了一个整型变量C。这可能导致结果被截断。建议使用一个整型变量temp来存储中间结果,然后再将temp的值赋给C

    下面是修改后的代码:

    #include <stdio.h>
    #include <math.h>
    
    int main() {
        int a, i=1, C=0, temp;
        int b[100]={0};
        scanf("%d",&a);
    
        // 初始化C为a的最高位数
        temp = a;
        while (temp >= 10) {
            temp /= 10;
        }
        C = temp;
    
        do{
            b[i] = a % 10;
            a = a / 10;
            temp = b[i] * pow(10, i);
            C += temp;
            i++;
        } while(a != 0);
    
        do{
            if (i % 3 == 0 && b[i-1] != 0) {
                printf(",%d", b[i-1]);
            } else {
                printf("%d", b[i-1]);
            }
            i--;
        } while(i >= 1);
    
        return 0;
    }
    

    希望以上解决方案对您有帮助,如果还有其他问题,请随时提问。



    【相关推荐】



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

报告相同问题?

问题事件

  • 创建了问题 9月19日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀