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