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

完数某个数除了本数以外的因子相加等于它本身的数 这个题用除更方便,但是我是用的乘,下面是我的代码,想知道哪里错了,感谢!
例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

#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

#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;
}