求大佬帮忙使用C语言函数写一个关于完数的代码!具体描述如下!

问题描述 
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。

预置代码 
#include<stdio.h>

void Solve(int);

/*fact函数
如果整数n是完数,则返回1;否则返回0。
把n的每个因子放在一维数组a中。
*len是数组a的长度。
*/
int fact(int n, int a[], int *len);

int main()
{
int n;
while(scanf("%d", &n)!=EOF){
Solve(n);
}

return 0;
}输入 
测试数据有多个,每个测试数据是一个单独的整数n。输出 
对每个测试数据n,
(1)如果n是完数,则输出它,并且输出它的因子。输出样式如下
Yes, its factors are 1 2 3 
每个因子后面都有一个空格。
(2)如果不是完数,则输出:
No
每个测试数据的输出占单独的一行。

输入样列 
6
100
输出样例 
Yes, its factors are 1 2 3 
No

天涯尽头无女友
浏览 329回答 1
1回答

qq_遁去的一_1

void Solve(int num){int sum = 0;int i = 0;if (num == 0){printf("No\n");}else if (num == 1){printf("Yes, its factors are %d\n", num);}else{for (i = 1; i < num; i++){if (num % i == 0){sum += i;}}if (sum == num){printf("Yes, its factors are ");for (i = 1; i < num; i++){if (num % i == 0){printf("%d ", i);}}printf("\n");}else{printf("No\n");}}}int main() //链表建立测试{int n;while(scanf("%d", &n) != EOF){Solve(n);fflush(stdin); //防止输入字母造成死循环}return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP