文章
1
粉丝
224
获赞
1
访问
5.3k
菜鸡一枚,斗胆发个解题 ,有点繁琐但绝对能懂
//完数
#include<stdio.h>
#include<stdbool.h>
bool IsWAN(int N) {//先判断是不是完数
int yz[10000],j=0,sum=0 ;//yz[]是因子数组
for(int i=1; i<N; i++) {
if(N%i==0) {
yz[j]=i;
j++;//记录因子数组的个数
}
}
for(int i=0; i<j; i++) {//求所有因子的和
sum+=yz[i];
}
if(sum==N) {
return true;
} else {
return false;
}
}
int main() {
int n,wan[10000],k=0;
scanf("%d",&n);
for(int i=1; i<=n; i++) {
if(IsWAN(i)) {//将完数存到wan[]中
int b=0;
wan[k]=i;
k++;//记录数组个数
}
}
// for(int i=0; i<k; i++)//完数数组没问题
// printf("%d",wan[i]);
for(int v=0;v<k;v++){
int p=0,yzz[1000];//依然是因子数组
int temp=wan[v];//暂存一个完数
for(int a=1;a<temp;a++){//再算一次完数的因子=。=
if(temp%a==0){
yzz[p]=a;
p++;
}
}
printf("%d its fastor are ",temp);//输出完数
for(int r=0;r<p;r++){//输出那个完数的因子
printf("%d ",yzz[r]);
}
printf("\n");
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发