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;
}

 

 
posted @ 2021-02-24 21:42  FantasticDoulbeFish  阅读(558)  评论(0编辑  收藏  举报