首先我们需要了解求一个数据的因数的方法
假设要求a的因数,令b从1累加到a/2,如果期间a%b==0了,说明b是a的因数。
//baizhen
#include <stdio.h>
int main(void)
{
int a=0,b=1;
scanf("%d",&a);
for(;b<=a/2;b++)
if(a%b==0)
printf("%d\n",b);
return 0;
}
然后判断a是不是完数
//baizhen
#include <stdio.h>
int main(void)
{
int a=0,b=1,c=0,digits=1; //a输入范围 b因数测试 c累加 digits计数器
scanf("%d",&a);
for(;digits<=a;digits++) //设置digits从1加到a
{
for(b=1,c=0;b<=digits/2;b++)
{ //b从1加到a/2,测试是不是因数
if(digits%b==0)
{
c=c+b;
}
}
if(c==digits)
{
printf("%d its factors are\n",digits);
}
}
return 0;
}
最后把因数输出在后面,以下代码可以满分通过acm测试系统
//baizhen #include <stdio.h> int main(void) { int a=0,b=1,c=0,digits=1; //a输入范围 b因数测试 c累加 digits计数器 scanf("%d",&a); for(;digits<=a;digits++) //设置digits从1加到a { for(b=1,c=0;b<=digits/2;b++) { //b从1加到a/2,测试是不是因数 if(digits%b==0) { c=c+b; } } if(c==digits) { printf("%d its factors are",digits); for(b=1,c=0;b<=digits/2;b++) { if(digits%b==0) { printf(" %d",b); } } printf("\n"); } } return 0; }
本题也可以使用数组,内存占用大但是计算速度快。