九度 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<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 ****************************************************************/

你可能感兴趣的:(算法,面试,C语言,软件,笔试)