我需要找到一个正整数的最大除数并将其输出。除数不应为1或等于整数本身。如果是质数,则输出应为“ 0”。到目前为止,我已经有了这段代码。但是,它不起作用。它仅在我使用“ break”而不是“ return 0”语句时有效,但是根据任务我不应该使用break :(我该如何解决?

#include <stdio.h>

int main() {
    int input, maxDiv;
    int div = 2;

    scanf("%d", &input);

    for ( ; div <= input/2; div += 1 ) {
        if ( input % div == 0 ) {
            maxDiv = input / div;
            return 0;
        } else {
            maxDiv = 0;
        }
    }

    printf("%d\n", maxDiv);

    return 0;
}

最佳答案

你可以这样重写

int main(){
    int input, maxDiv = 0;
    int div = 2;

    scanf("%d", &input);

    for(; !maxDiv; div++)
        if(!(input%div))
            maxDiv = input/div;

    printf("%d\n", ( maxDiv == 1 || input < 0 ? 0 : maxDiv ) );
    return 0;
}


这是一个无限循环,一旦maxDiv != 0就会退出。复杂度为O(sqrt (n)),因为总是存在一个小于或等于sqrt(n)的n除数,因此代码必须退出(即使输入为负)。

我忘了,您必须处理输入为零的情况。

关于c - 找出正整数的最大除数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25097162/

10-09 03:24