所以我有这个方法可以找到给定数字的因子数。它工作正常,但我正在使用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);}
答案 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;
}