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

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

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


函数接口定义:

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


其中函数 factorsum 须返回 (int number)的因子和;函数PrintPN 要逐行输出给定范围[m, n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子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:

No perfect number


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

有错误请指出,谢谢!!!


相关文章
|
5天前
输出9*9口诀
输出9*9口诀。
13 1
|
5天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
|
5天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
8月前
L1-028 判断素数 (10 分)
L1-028 判断素数 (10 分)
|
11月前
|
算法
题目:输出n行杨辉三角形
题目:输出n行杨辉三角形
66 0
python:考试前,练手习题(斐波那契数,字符串排序,九九乘法表,水仙花数,求和...求数字倍数,(保佑不挂科!)
整理一些练手的题目(含代码),可能不是特别优美,有些繁琐,但是等有时间再优化吧~~ 1.水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。 请编写程序,在一行内,按从小到大的顺序输出所有水仙花数,以空格作为分割
7-2 输出约数 (9 分)
7-2 输出约数 (9 分)
85 0
|
测试技术
7-177 输出全排列 (20 分)
7-177 输出全排列 (20 分)
64 0
7-3 输出最大公约数 (10 分)
7-3 输出最大公约数 (10 分)
95 0
7-4 输出最小公倍数 (9 分)
7-4 输出最小公倍数 (9 分)
64 0