```c
#include <stdio.h>
int main() {
int n, i, j, sum
printf("请输入一个正整数n:")
scanf("%d", &n)
for (i = 1i <= n++i) {
sum = 0
for (j = 1j <= i / 2++j) {
if (i % j == 0) {
sum += j
}
}
if (sum == i) {
printf("%d\n", i)
}
}
return 0
}
```
解释如下:
1. 首先,定义变量n、i、j和sum。
2. 要求用户输入n。
4. 内部循环计算数字i的所有真因子之和。
5. 如果该总和等于数字i本身,则输出该数字,即它是一个完全数。
6. 最后返回0结束程序。
注意,此代码中包含了一个优化,即内部循环只需要手宴遍历1到i的一半,因为大于i的一半的因子已经在之前被计算过了。
如果想显示完全数的因子的话,用数组存储比较合适。你的程序有个逻辑错误。if(a%b==0)你忘记还有自身也是自身的因子数,导致后面凳尺的判别局衫式永远不成立,应枣腊高改为
if(a%b==0&&a!=b)
自己改了下用数组的:
#include<stdio.h>
int
main()
{
int
k[20],a,b,c
for(a=2a<=1000a++)
{c=0
for(b=1b<=ab++)
{
if(a%b==0&&b!=a)
{
k[c]=b
c++
}
if(b==a){
int
num=0
for(int
i=0i<ci++)
num=num+k[i]
if(num==a){
printf("%d
",a)
printf("its
factors
is
:
")
for(int
i=0i<ci++)
printf("%d
",k[i])
printf("\n")
}
}
}
}
return
0
}
#include<stdio.h>void main()
{
int i,t(0),m
printf("请输段枝入一个数:")
scnaf("%d",&m)
for(i=1i<mi++)
{
if(m%i==0)
t=t+i
}
if (t==m)
printf("该数是握埋敏完数")
else
printf("该数不是液唤完数")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)