文章

1

粉丝

224

获赞

1

访问

5.3k

头像
完数详解,(C语言版)
推荐阅读
P1046 兰州大学机试题
发布于2022年3月14日 20:42
阅读数 5.3k

菜鸡一枚,斗胆发个解题 laugh有点繁琐但绝对能懂

//完数
#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;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发