找JAVA高手帮我解释个题目

来源:百度知道 编辑:UC知道 时间:2024/06/17 10:03:20
public static void main(String[] args) {
int i, j = 0, l, s = 0;
int[] arr;

for (int a = 1; a <= 1000; a++) {
for (i = 1; i <= a / 2; i++) {
if (a % i == 0) {
if (i >= a / 2 - 1) {
arr = new int[100];
for (i = 1; i <= a / 2; i++) {
if (a % i == 0) {
arr[j] = i;

j++;
}

}
for (l = 0; l <= j; l++) {
s = s + arr[l];
}
if (s == a) {
System.out.println(a + "是个完数");
System.out.print(a + "=1");
for (l = 1; l <= j - 1; l++) {
System.out.print("+" + arr[l]);
}
System.out.println();
}
s = 0;
j = 0;

}
}

}

}

}

里面的变量分别代表的是什么?我怎么都看不懂这些代码

完数:http://baike.baidu.com/view/640632.html?wtp=tt

a就不说了
arr用来记录数a的除本身外的所有因子,s记录arr中所有元素之和。
j记录arr下标,i遍历所有a的所有可能因子,因为数a除本身外不可能被大于a/2整除.if (i >= a / 2 - 1)则只是对算法进行了些优化,我想下面的算法更容易理解

int i, l, s = 0;
for (int a = 1; a <= 1000; a++) {
for (i = 1; i <= a / 2; i++) {
if (a % i == 0) {
s = s + i; //将一个数的除本身外所有因子加到S
}
}
if (s == a) { //判定是否是完数,是则输出,否则s清零,继续下一次
System.out.println(a + "是个完数");
System.out.print(a + "=1");
for (l = 2; l <= a/2; l++) {
if(a%l==0) System.out.print("+" + l);
} System.out.println();
}
s = 0;
}

看不懂学 学不懂练

把题目贴出来看看

你这些函数的作用是求1000以内的完数。变量a是1~1000这1000个数,数组arr存的是a的因子,如果a是一个完数,就打印出来并且打印出这个完数除了本身外的的所有因子

题目应该是求从1到1000的所有完数(除了本身以外的所有因子的和等于本身的整数,