C语言求完全数

#include"stdio.h"
int main(void)
{
int a,b,sum=0;

for(a=6;a<=1000;a++)
{
for(b=1;b<a;b++)
{
if(a%b==0)
{
if(a==6&&b==1)
{
printf("1\t");
sum+=b;
}
else
{
sum+=b;
printf("%d\t",b);
}
}

}
if(sum==a)
printf("他们因数之和是%d\n\n。",sum);
sum=0;
}
}

第1个回答  2013-12-14
#include"stdio.h"
int main(void)
{
int a,b,sum=0;
for(a=6;a<1000;a++){
sum=0;
for(b=a-1;b>=1;b--)
{
if(a%b==0)sum=sum+b;
}
if(sum==a)
printf("%-4d的因数之和是%d\n", a, sum);
}
}

执行结果如下;

有疑问继续追问;如解决您的问题,望采纳;

追问

为什么中间加了个print会出现那么多行数字。

追答

就是从a=6开始到a=999一个一个的算出他们的各自的因数和;如果求得的因数之和sum刚好等于a;那就把它输出来;一千以内有三个;【if(sum==a) printf("%-4d的因数之和是%d\n", a, sum);】这算一个执行语句;在a等于sum时输出;你要是改成【if(sum==a) printf("%d ", sum);】这样那就只有输出三个数了。

第2个回答  2013-12-14
#include"stdio.h"
int main(void)
{
    int a,b,sum=0,num[100],k =  0;

    for(a=6; a<=1000; a++)
    {
        k = 0;
        for(b=1; b<a; b++)
        {
            if(a%b==0)
            {
                sum+=b;
                if(b==1)
                {
                    num[k++] = 1;
                }
                else
                {
                    num[k++] = b;
                }
            }
        }
        if(sum==a)
        {
            printf("%d : ", a);
            for(b = 0; b < k; b++)
                printf("%d%c",num[b], b == k - 1 ? '\n' : '+');
            printf("他们因数之和是%d。\n\n",sum);
        }
        sum=0;
    }
}

相似回答