C语言编程练习63:完数
题目描述
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入
测试数据有多组,输入n,n数据范围不大。
输出
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入
6
样例输出
6
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
int ans[100];//存完数
int main()
{
int n;
int t;//记录完数的个数
int sum;//因数的和
while(cin>>n)
{
for(int m=2;m<=n;m++)
{
t=0;
sum=0;
for(int i=1;i<=(int)sqrt(m);i++)
{
if(m%i==0)
{
if(i==m/i)
{
sum=sum+i;
}
if(i!=m/i)
{
sum=sum+i+m/i;
}
}
}
if(sum==m*2)//加的时候会多加一次m,所以乘2(当i=1时,m/i=m)
{
ans[t]=m;
t++;
}
if(t!=0)
{
for(int k=0;k<t-1;t++)
{
cout<<ans[k]<<' ';
}
cout<<ans[t-1]<<endl;
}
}
}
return 0;
}

浙公网安备 33010602011771号