习题6-3 使用函数输出指定范围内的完数 (20分)

本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。

函数接口定义:

int factorsum( int number );
void PrintPN( int m, int n );

其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[mn]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。

裁判测试程序样例:

#include <stdio.h>

int factorsum( int number );
void PrintPN( int m, int n );

int main()
{
    int i, m, n;

    scanf("%d %d", &m, &n);
    if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
    if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
    PrintPN(m, n);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

1 30

输出样例1:

1 is a perfect number
1 = 1
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

输入样例2:

7 25

输出样例2:

No perfect number
int factorsum( int number )
{
    int i=0,sum=0;

    if(number==1){
        return number;
    }

    //判断number是否为完数
    for(i=1;i<number;i++){
            if(number%i == 0){
                sum += i;
            }
    } 

    //如果是完数,返回因子和
    if(sum == number){
        return sum;
    }
    else
        return 0;
}

void PrintPN( int m, int n )
{
    int i,j;
    int count = 0; //count作为是否有完数的标志

    //遍历m-n找出所有的完数
    for(i=m;i<=n;i++){

        //如果i是完数,则打印出它的因子和形式
        if(factorsum(i)!=0){

            int sum = 0;//sum出循环自动销毁
            count++;

            printf("%d = ",i);

            if(i==1){
                    printf("%d",i);
            } 

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

                if(i%j == 0){
                    printf("%d",j);
                    sum += j;

                //判断是否结束的标志是左右式子是否相等
                    if(sum != i){
                            printf(" + ");
                    }
                }
            }
            printf("\n");
        }
    } 

    if(count==0){
            printf("No perfect number");
    }
}

原文地址:https://www.cnblogs.com/Kimsohyun/p/12578920.html

时间: 2024-10-12 07:58:41

习题6-3 使用函数输出指定范围内的完数 (20分)的相关文章

习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0)之间的所有Fibonacci数.所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列. 函数接口定义: int fib( int n ); void PrintFN( int m, int n ); 其中函数fib须返回第n项Fibonacci数:函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余

习题6-3 使用函数输出指定范围内的完数

1 #include <stdio.h> 2 3 int factorsum(int number); 4 void PrintPN(int m, int n); 5 6 int main() 7 { 8 int i, m, n; 9 10 scanf_s("%d %d", &m, &n); 11 if (factorsum(m) == m) printf("%d is a perfect number\n", m); 12 if (fa

PTA输出指定范围内的完数

1 #include <stdio.h> 2 3 int factorsum( int number ); 4 void PrintPN( int m, int n ); 5 6 int main() 7 { 8 int i, m, n; 9 10 scanf("%d %d", &m, &n); 11 if ( factorsum(m) == m ) printf("%d is a perfect number\n", m); 12 if

「C语言」「算法」输出指定范围内的素数

#include <stdio.h> //输出指定范围内的素数 int main(){ int a,b; int i,j; printf("请输入整数范围并用空格隔开:\n"); scanf("%d%d",&a,&b); for(i=a;i<=b;i++){ for(j=2;j<=i-1;j++) { if(i%j==0) break; } if(j>=i-1) printf("%d ",i); }

C语言之基本算法38—格式化输出10000以内的全部完数

//穷举法! /* ================================================================== 题目:求10000以内的全部完数,统计数量并以例如以下格式输出: 28=1+2+4+7+14. 注:完数是除了本身外.其值等于包括1的全部因子之和! 如:28的全部因子是:1,2,4,7,28,除了28外其他因子的和=28,故28是完数! =====================================================

C语言之基本算法38—格式化输出10000以内的所有完数

//穷举法! /* ================================================================== 题目:求10000以内的所有完数,统计数量并以如下格式输出: 28=1+2+4+7+14. 注:完数是除了本身外,其值等于包含1的所有因子之和! 如:28的所有因子是:1,2,4,7,28,除了28外其它因子的和=28,故28是完数! =======================================================

中国MOOC_零基础学Java语言_第7周 函数_2完数

2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数. 提示:可以写一个函数来判断某个数是否是完数. 输入格式: 两个正整数,以空格分隔. 输出格式: 其间所有的完数,以空格分隔,最后一个数字后面没有空格.如果没有,则输出一个空行. 输入样例: 1 10 输出样例:

网易云课堂_程序设计入门-C语言_第五周:函数_2完数

2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数. 提示:可以写一个函数来判断某个数是否是完数. 输入格式: 两个正整数,以空格分隔. 输出格式: 其间所有的完数,以空格分隔,最后一个数字后面没有空格.如果没有,则输出一个空行. 输入样例: 1 10 输出样例:

如何使用ob函数输出静态html文件

如何使用ob函数输出静态html文件 1.ob函数介绍 1.1.ob_start - 打开输出控制缓冲 bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )  此函数将打开输出缓冲.当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中.详情参考:http://php.net/manual/zh/function.ob-start.php 1.