zoukankan      html  css  js  c++  java
  • 习题6-3 使用函数输出指定范围内的完数(20 分)

    本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<mn10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如: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
    ", m);
        if ( factorsum(n) == n ) printf("%d is a perfect number
    ", 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
    
    #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
    ", m);
        if ( factorsum(n) == n ) printf("%d is a perfect number
    ", n);
       PrintPN(m, n); 
        return 0;
    }
    
    int factorsum( int number )
    {
        int i=0,ret = 0;    
        if(number==1)
        {
            return number;
        }
        //判断数number是否为完数 
        for(i=1; i<number; i++)
        {
            if(number%i == 0)
            {
                ret += i;
            }
        }
        //如果是完数,返回因子和 
        if(ret == number)
        {
            return ret;
        }
        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 ret = 0;//ret出循环自动销毁         
                count++;
                printf("%d = ",i);
                if(i==1)
                {
                    printf("%d",i);
                }
                for(j=1; j<i; j++)
                {
                    if(i%j == 0)
                    {
                        printf("%d",j);
                        ret += j;
                    //判断是否结束的标志是左右式子是否相等    
                        if(ret != i)
                        {
                            printf(" + ");
                        }                    
                    }
                }
                printf("
    ");    
            }
        }
        if(count==0)
        {
            printf("No perfect number");
        }     
    }

    判断一个数是否为完数

    #include<stdio.h>
    int p(int n);
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            p(n);
        }
        return 0;
    }
    int p(int n)
    {
        int sum=0;
        for(int i=1;i<n;i++)
        {
            if(n%i==0)
            {
                sum=sum+i; 
            }
        }
        if(sum==n)
        {
            printf("%d是完数!
    ",n);
        }
        else
        {
            printf("%d不是完数!
    ",n);
        }
    } 

    输出完数

    #include<stdio.h>
    int p(int n);
    int main()
    {
        int m,n;
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            int flag=1;
            for(int i=m;i<=n;i++)
            {
                if(i==p(i))
                {
                    if(flag==1)//第一个数前没有空格 
                    {
                        printf("%d",i);
                        flag=0;
                    }
                    else
                    {
                        printf(" %d",i);
                    }
                }
            }
            printf("
    ");
        }
        return 0;
    }
    int p(int n)
    {
        int sum=0;
        for(int i=1;i<n;i++)
        {
            if(n%i==0)
            {
                sum=sum+i; 
            }
        }
        return sum;
    } 

    输出完数形式

    #include <stdio.h>
    #include <string.h>
    #define N 100
    
    int factorsum( int number );
    void PrintPN( int m, int n );
    
    int main()
    {
        int m, n;
        scanf("%d %d", &m, &n);
        if ( factorsum(m) == m ) printf("%d is a perfect number
    ", m);
        if ( factorsum(n) == n ) printf("%d is a perfect number
    ", n);
        PrintPN(m, n);
        return 0;
    } 
    
    int factorsum( int number )
    {
    
        int a[N],n=0,sum=0;
        if(number == 1)
            return 1;
        for(int i=1;i<number;i++)
            if(number%i==0)
            {
                sum=sum+i;
            }
        if(sum == number)
            return 1;
            
        return 0;
    }
    
    void PrintPN( int m, int n )
    {
        int t,k=0,a[N];
    
        if(m==1)//如果为1 
        {
            printf("%d = %d
    ",m , m);
            m+=1;
    
        }
        for(int i=m;i<=n;i++)
        {
            if(factorsum(i)==1)
            {
                for(int j=1;j<i;j++)
                {
                    if(i%j==0)
                    {
                        a[k++]=j;
                    }
                }
                printf("%d = ", i);
                for(t=0;t<k-1;t++)
                    printf("%d + ", a[t]);
                printf("%d
    ", a[t]);
                k=0;
            }
        }    
    }
  • 相关阅读:
    NSDate的处理:前一天、后一天等关于时区偏移的处理以及在数据库中的使用
    《powershell 的版本号所引起的载入 FSharp 编译器问题》基本解决
    hdu 2055 An easy problem (java)
    昨天登陆页面,无法进入后台,今天攻克了
    关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法
    (转)Struts2的拦截器
    (转)Struts2的标签库
    (转)OGNL与值栈
    (转)Struts2访问Servlet的API及......
    (转)Struts2快速入门
  • 原文地址:https://www.cnblogs.com/2228212230qq/p/9260970.html
Copyright © 2011-2022 走看看