我需要找到一个正整数的最大除数并将其输出。除数不应为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/