#include <stdio.h>
int main(){
int n,copy,counter=0,prevcounter,prev;
scanf("%d",&n);
while(n>0){
counter = 0;
n--;
copy = n;
while(copy>0){
--copy;
if(n%copy==0){
counter++;}
if(copy==0)break;
}
if(counter>prevcounter){
prevcounter = counter;
prev = n;
}
}
printf("%d",prev);
}
所以这是我的代码:问题是这段代码永远循环,问题就在这里
while(copy>0)
但如果我将其更改为
while(copy>1)
它正在工作....我想知道它为什么会永远循环但我无法找到答案..我正在减少副本,当它变为0时它应该从循环中断...我甚至添加另一张支票
if(copy==0)break;
但它仍然没有用。任何sugestions?谢谢
答案 0 :(得分:3)
您%
时也使用copy=0
。这是导致未定义行为的错误。(除以零)。
prevcounter
未初始化。
代码将是这样的: -
#include <stdio.h>
int main(){
int n,copy,counter=0,prevcounter=0,prev;
scanf("%d",&n);
while(n>0)
{
counter = 0;
n--;
copy = n;
while(copy>0)
{
--copy;
if(copy && n%copy==0){
counter++;
}
}
if(counter>prevcounter){
prevcounter = counter;
prev = n;
}
}
printf("%d",prev);
}
您需要考虑执行期间可能出现的copy
的所有值。在循环中,您将排除copy
变为零且if(copy && n%copy==0)
确保此情况的情况。