使用while循环查找因子数

时间:2014-01-30 19:46:39

标签: factors

所以我有这个方法可以找到给定数字的因子数。它工作正常,但我正在使用for循环,我的老师希望我将其更改为while循环,以使其更有效,香港专业教育学院试图改变它,但我一直在这里得到无限循环是我使用的代码for循环可以将它更改为while循环而不使用break并且在整个方法中只有一个return语句

 public static int numberOfFactors(int num){
  int i;
  int total=0;
 for(i=1;i<=num;i++){
   if(num%i==0)
        total++;
 }
  return (total);}

2 个答案:

答案 0 :(得分:3)

我看不清楚:

i = 1;
while(i <= num) {
    // do things
    i++;
}

效率更高:

for( i=1; i<=num; i++) {
    // do things
}

据我所知?不是!我很想知道老师为什么会这么想。


那就是说,你可以做些什么来提高效率:

  • 计算num的平方根,并将其作为整数放入sqrtnum,向下舍入。
  • 将您的循环更改为for(i=1; i<sqrtnum; i++)(注意<,而不是<=
  • 如果num%i==0,请按total增加2,而不是1
  • 循环后,检查是否sqrtnum*sqrtnum == num - 如果是,请按total增加1

通过这种方式,你只需循环一小部分数字;)

答案 1 :(得分:0)

效率不高......但

public static int numberOfFactors(int num) {
  int total = 0;
  int i = 1;

  while(i <= num) {
    if(num%i == 0)
      total++;
    i++;
  }

  return total;
}