完数某个数除了本数以外的因子相加等于它本身的数 这个题用除更方便,但是我是用的乘,下面是我的代码,想知道哪里错了,感谢!
例6=1乘6也=2乘3且6=1+2+3,则6是完数
输入L,R
输出
在区间【L,R】的所有完数

#include <stdio.h>
int main() {
int L, R, i, z, n, j;
int k = 0, h = 0;
scanf("%d%d", &L, &R);
n = z / 2;
for (z = L; z <= R; z++) {
for (i = 0; i < n; i++) {
for (j = n; j < z; j++) {
if (z == (i * j)) {
k = k + i;
h = h + j;
}
}
}
if (z == (k + h))
printf("%d", z);
}
return 0;
}
加了注释,你参考下改改
int main() { int L, R, i, z = 0, n, j; int k = 0, h = 0; scanf("%d%d", &L, &R); for (z = L; z <= R; z++) { n = sqrt(z); k = 0; h = 0; for (i = 1; i <= n; i++) { for (j = n; j <= z; j++) { if (z == (i * j)) { if(i != z) { k = k + i; } if(j != z) { h = h + j; } } } } if (z == (k + h)) printf("%d", z); } return 0;}
我的测试输出:

#include<stdio.h>int main(){ int i,j,k=0,a[1000],t,n,n2; printf("请输入数字n:"); scanf("%d%d",&n,&n2); for(i=n; i<=n2; i++) { t=i; for(j=1; j<i; j++) { if(i%j==0) t-=j; } if(t==0) { a[k]=i; k++; } } if(k!=0) { for(i=0; i<k; i++) { printf("%d ",a[i]); } } else { printf("No!"); } return 0;}
#include <stdio.h>int main(){ int L, R, i, z, n; scanf("%d%d", &L, &R); for (z = L; z <= R; z++) { n = 0; for (i = 1; i < z; i++) { if (z % i == 0) { n += i; } } if (z == n) printf("%d\n", z); } return 0;}