九度 Online Judge 算法 刷题 题目1050:完数

题目1050:完数

题目描述:
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入:
测试数据有多组,输入n,n数据范围不大。
输出:
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入:
6
样例输出:
6
来源:
2010年哈尔滨工业大学计算机研究生机试真题

code

c语言实现 方法1

#include
#include
int fun( int a) {
    int i,flag=a;
    for(i=1; iif (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 
using namespace std;
int main()
{
int a;
while(cin>>a)
{
if(16) cout<<"6"<else if(a<=465) cout<<"6 28"<else if(a<=8127) cout<<"6 28 496"<else if(a<=33550335) cout<<"6 28 496 8128"<else cout<<"6 28 496 8128 33550336"<return 0;
}
/**************************************************************
    Problem: 1050
    User: langzimaizan
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1520 kb
****************************************************************/

c 语言 实现 方法2

#include
#include
int fun( int a) {
    int i,flag=a;
    for(i=1; iif (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
****************************************************************/

你可能感兴趣的:(九度)