c语言 完数用乘来解想知道哪里错了

CSDN问答 2021-12-30 12:00:27 阅读数:431

语言 知道 错了 想知道

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

img


#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要在每一轮置为 z 开根 n = sqrt(z); // k 和 n 每轮要清空 k = 0; h = 0; // i 可以取到 n for (i = 1; i <= n; i++) { // j 也可以取到 z,不然1没有办法进入 k for (j = n; j <= z; j++) { if (z == (i * j)) { // i 和 j 加进来的时候,要判断 i和j 是否等于 z if(i != z) { k = k + i; } if(j != z) { h = h + j; } } } } if (z == (k + h)) printf("%d", z); } return 0;}

我的测试输出:

img



其他答案2:
#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;}//参考:https://blog.csdn.net/qq_41575507/article/details/82256726

其他答案3:
#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;}
版权声明:本文为[CSDN问答]所创,转载请带上原文链接,感谢。 https://ask.csdn.net/questions/7619946