0

所以我有这种方法可以找到给定数字的因子数。它工作正常,一切正常,但我正在使用 for 循环,我的老师希望我将其更改为 while 循环以使其更高效,我试图更改它,但我不断得到无限循环这是我使用的代码for 循环在不使用 break 并且在整个方法中只有一个 return 语句的情况下将其更改为 while 循环可能会更好

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

2 回答 2

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,则增加total2而不是1
  • 在循环之后,检查是否sqrtnum*sqrtnum == num- 如果是,则total增加1.

这样,您只需遍历一小部分数字;)

于 2014-01-30T19:48:07.570 回答
0

没有任何效率,但是......

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

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

  return total;
}
于 2014-01-30T19:55:05.727 回答