c中的比较对于2以外的整数不正确?[关闭]

4dbbbstv  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(109)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6天前关闭
Improve this question
我正在写一个函数来确定一个数字的素因子,并在一个双向链表中返回它们。代码如下。(create_list、add_to_tail和print_DLL对DLL执行操作并正常工作)。

DLL* primefactors(int a, DLL *factors){
    int i;
    int primes[40] = {
        2,      3,      5,      7,      11,     13,     17,     19,     23,     29,
        31,     37,     41,     43,     37,     53,     59,     61,     67,     71,
        73,     79,     83,     89,     97,     101,    103,    107,    109,    113,
        127,    131,    137,    139,    149,    151,    157,    163,    167,    173};
    
    factors = create_list(1);       // create with node of "1" to begin with
    
    i = 0;
    while(i < 40 && a != 1){
        if (a % primes[0] == 0){
            printf("%d is a factor of %d; ", primes[i], a);
            add_to_tail(factors, primes[0]);
            a = a / primes[0];
            printf("remainder is %d\n", a);
        } else {
            printf("%d is not a factor of %d; increasing to %d\n", primes[i], a, primes[i + 1]);
            i++;
        }
    }
    print_DLL(factors);
    return factors;
}

该函数在测试因子为2时正常工作,但不能将更高的素数识别为因子。例如primefactors(8)正确地给出1,2,2,2;但是primefactors(24)给出了1,2,2,2,然后不认为3是一个因子,而是运行到素数列表的末尾(请忽略列表开头的1)。
为什么会这样,请问如何解决?我原以为a / prime[i]会给予一个精确的整数,因为a和prime[i]都是整数,避免了浮点数比较的问题。
谢谢你!

wh6knrhe

wh6knrhe1#

正如Barmar和Some programmer dude在评论中指出的那样,除法应该使用素数[i]而不是素数[0]。有了这个修正,它就起作用了。谢谢!

相关问题