描述
输入一个正整数 repeat (0<repeat<10),做repeat 次下列运算:
输入 2 个正整数m 和n(1<=m,n<=1000),输出m 到n 之间的所有完数(完数就是因子和与它本身相等的数)。
输入
见sample
输出
见sample
输入样例 1
1
1 100
输出样例 1
1 6 28
这个题目看似简单其实有一个坑,那就是最后一个数后面没有空格,而你需要判断那个完数是最后一个完数。这里可以先使用一个数组存储完数,1到1000(题意中1也是完数)只有五个完数我们可以多给点设置一个10位的数组,存贮完数,然后在主函数判断是否为完数,最后一个不带空格即可。
#include <iostream>
using namespace std;
int a[10]= {};
void WANSHU()
{
int sum,j=0;
for(int i=1; i<=10000; i++)
{
sum=0;
if(i==1)
{
a[j]=i;
j++;
}
for(int j=1; j<i; j++)
{
if(i%j==0)
sum+=j;
}
if(sum==i)
{
a[j]=sum;
j++;
}
}
}
int main()
{
int repeat,m,n,sum;
WANSHU();
while(cin>>repeat)
{
for(int b=0; b<repeat; b++)
{
cin>>m>>n;
for(int i=m; i<n; i++)
{
for(int j=0; j<10; j++)
{
if(i==a[j])
{
if(a[j+1]>n-1)
cout<<i<<endl;
else
cout<<i<<" ";
}
}
}
}
}
return 0;
}