首页 > 试题广场 >

使用函数输出指定范围内的完数:输入两个正整数m和n(1≤m,

[问答题]

使用函数输出指定范围内的完数:输入两个正整数m和n(1≤m,n≤1 000),输出m~n之间的所有完数,完数就是因子和它本身相等的数。要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum(12)的返回值是16(1+2+3+4+6)。试编写相应程序。

int factorsum(int number){
    int i,sum;
    sum=0;
    for(i=1;i<=number/2;i++){
        if(number%i==0)
            sum+=i;
    }
    return sum;
}

void PrintPN(int m,int n){
    int i,j,count;
    count=0;
    for(i=m;i<=n;i++){
        if(factorsum(i)==i){
            printf("%d = 1",i);
            for (j=2;j<=i/2;j++){
                if(i%j==0)
                    printf(" + %d",j);
            }
            printf("\n");
            count++;
        }
    }
    if(count==0)
        printf("No perfect number");
}

发表于 2020-10-19 21:03:45 回复(0)
#include<stdio.h>
int factorsum(int number);
int main(){
    int m,n,i,cnt=0;

    printf("input m and n: ");
    scanf("%d %d",&m,&n);

    if(m>=1 && n<=1000){
        for(i=m;i<=n;i++){  //m~n之间寻找
            if(factorsum(i)==i){    //因子和与本身相等,即完数
                printf("%6d",i);
                cnt++;
                if(cnt%10 == 0)     //每行显示10个
                    printf("\n");
            }
        }
    }else{
        printf("invalid value");
    }

    return 0;
}

//返回number 的因子和
int factorsum(int number){
    int sum=0,i,temp;
    temp = number>>1;   // 显然num的因子不超过number的1/2;故寻找number的因子时只找 1 ~ 0.5*number即可

    for(i=1;i<=temp;i++){
        if(number%i == 0){
            sum += i;       //因子和
        }
    }

    return sum;
}

发表于 2022-01-18 18:37:19 回复(0)

#include<stdio.h>

int factorsum(int number)

{

    int i,sum=0;

    for (i = 1; i < number; i++)

         if (number%i == 0)

             sum += i;

    return sum;

}

int main(void)

{

    int m,n,j,s;

    printf("please input m,n:");

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

         for(j=m;j<=n;j++)

         {

             s = j;

          if (factorsum(s) == s)

          printf("%d is 完数",s);

        }

    return 0;

}

发表于 2018-11-04 22:00:51 回复(0)