题目1050:完数
题目描述:
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入:
测试数据有多组,输入n,n数据范围不大。
输出:
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入:
6
样例输出:
6
来源:
2010年哈尔滨工业大学计算机研究生机试真题
code
c语言实现 方法1
#include<stdio.h>
#include<stdlib.h>
int fun( int a) {
int i,flag=a;
for(i=1; i<a; i++){
if (a%i == 0)
flag = flag-i;
}
return flag;
}
int main() {
int n,x,flag=0;
while (scanf("%d",&n) == 1) {
if (n<1)
continue;
else {
x=2;flag=0;
while (x<=n) {
if(fun(x)==0) {
flag = 1;
if(x==6)
printf("%d",x);
else
printf(" %d",x);
}
x++;
}
if (flag) printf("\n");
}
}
return 0;
}
/**************************************************************
Problem: 1050
User: langzimaizan
Language: C
Result: Accepted
Time:230 ms
Memory:912 kb
****************************************************************/
C++ 实现
#include <iostream>
using namespace std;
int main()
{
int a;
while(cin>>a)
{
if(1<a&&a<=6) cout<<"6"<<endl;
else if(a<=465) cout<<"6 28"<<endl;
else if(a<=8127) cout<<"6 28 496"<<endl;
else if(a<=33550335) cout<<"6 28 496 8128"<<endl;
else cout<<"6 28 496 8128 33550336"<<endl;
}
return 0;
}
/**************************************************************
Problem: 1050
User: langzimaizan
Language: C++
Result: Accepted
Time:0 ms
Memory:1520 kb
****************************************************************/
c 语言 实现 方法2
#include<stdio.h>
#include<stdlib.h>
int fun( int a) {
int i,flag=a;
for(i=1; i<a; i++){
if (a%i == 0)
flag = flag-i;
}
return flag;
}
int main() {
int n,m[50],x,i;
int *p=m;
while (scanf("%d",&n) == 1) {
if (n<1)
continue;
else {
x=2;
for (i=0; i <50; i++)
m[i] = 0;
i=0;
while (x<=n) {
if(fun(x)==0) {
m[i] = x;
i++;
}
x++;
}
for (i=0; i <=10; i++) {
if (i==0)
printf("%d",m[i]);
else {
if (m[i]==0) {
printf("\n");
break;
}
else
printf(" %d",m[i]);
}
}
}
}
return 0;
}
/**************************************************************
Problem: 1050
User: langzimaizan
Language: C
Result: Accepted
Time:230 ms
Memory:912 kb
****************************************************************/