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

img


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

代码的主要问题在于循环条件以及不必要的使用pow函数。以下是一个修复后的版本:

#include <stdio.h>

int main() {
    int a, i = 1, c = 0;
    int b[100] = {0};

    scanf("%d", &a);

    // 将整数反转存储到数组中
    do {
        b[i] = a % 10;
        a = a / 10;
        i++;
    } while (a != 0);

    i--; // 修正 i 的值,因为上面的循环会多加一次

    // 输出带千分位分隔符的整数
    do {
        if ((i - 1) % 3 == 0 && b[i] != 0) {
            printf(",%d", b[i]);
        } else {
            printf("%d", b[i]);
        }
        i--;
    } while (i != 0);

    return 0;
}

上面代码修复了循环条件,确保正确处理了整数的每一位,并且在输出时加入了逗号来实现千分位分隔符的效果。

【以下回答由 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;
}

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



【相关推荐】



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