完数

完数(5分)

题目内容:

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。

现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。

提示:可以写一个函数来判断某个数是否是完数。

输入格式:

两个正整数,以空格分隔。

输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一行文字:

NIL

(输出NIL三个大写字母加回车)。

输入样例:

1 10

输出样例:

6

时间限制:500ms内存限制:32000kb
 
参考代码:

#include<stdio.h>

int iswanshu;

void wanshu(int n){

    int a[100]={0};

    int i;

    int j = 0;

    int cnt = 0;

    int ret = 0;//记录因子之和

 

    for(i=1;i<n;i++){

        if(n%i==0){

            a[j++]=i;

            cnt++;

        }

    }

    for(i=0;i<cnt;i++){

        ret+=a[i];

    }

    if(ret==n){

        iswanshu=1;

    }else{

        iswanshu=0;

    }

}

int main(){

    int a[100]={0};

    int n,m;

    int cnt = 0;

    int j = 0;

    scanf("%d %d", &n, &m);

    for(int i=n;i<=m;i++){

        wanshu(i);//调用函数判断一个数是否为完数

        if(iswanshu==1){

            a[j++]=i;

            cnt++;

        }

    }

    if(cnt!=0){

        for(int i=0;i<cnt;i++){

            if(i<cnt-1){

                printf("%d ",a[i]);

            }else{

                printf("%d",a[i]);

            }

        }      

    }else{

        printf("NIL ");

    }

    return 0;

}

 

原文地址:https://www.cnblogs.com/zhhjthing/p/7782360.html