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