zoukankan      html  css  js  c++  java
  • 【枚举】完数判断

    题目描述

    一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子

    输入

    N

    输出

    ? its factors are ? ? ?

    样例输入

    1000
    

    样例输出

    6 its factors are 1 2 3 
    28 its factors are 1 2 4 7 14 
    496 its factors are 1 2 4 8 16 31 62 124 248 
    

    分析

    题目完整地读下来,我可发现,这道题地关键就在于如何判断完数以及按格式输出完数的所有因子。假设法,存在函数能帮助我们判断数字是否是完数,以及存在函数能帮助我们将数字的所有因子按格式输出,将他们分别起名为isCompNum()和printFactors()。我们可以写出对应的整体框架

    int main()
    {
        int n;// 存放范围
        cin>>n;// 输入范围
        for(int i=6;i<=n;i++)//最小的完数是6,遍历6~n
        {
            if(isCompNum(i))// 如果是完数
            {
                printFactors(i);//按格式输出所有因子
            }
        }
        return 0;
    }
    

    接着,完成isCompNum函数以及printFactors函数的具体实现。先从完数的判断开始,从定义出发,一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。此时我们只需找出数字所有非自身因子,将他们累加,将和与自身进行比较,相同则是完数,不同则不是。

    bool isCompNum(int num)
    {// 判断完数,是的话返回true ,不是返回false
        int sum=0;// 存储计算不包含本身的所有因子之和
        for(int i=1;i<num;i++)
        {//遍历 1~num-1
            if(num%i==0) sum+=i;// 如果能整除,则i是num的因子,进行累加求和
        }
        return sum==num;//返回总和与Num的判断结果
    }
    

    再进行因子的输出,遍历所有的因子,去除掉自身之后输出即可。注意输出格式,最后加上换行。

    void printFactors(int num)
    {// 输出数字num的所有因子
        cout<<num<<" its factors are";
        for(int i=1;i<num;i++)
        {// 遍历1~num-1
            if(num%i==0)//如果i是num的因子
            {
                cout<<" "<<i;
            }
        }
        cout<<endl;
    }
    

    然后将他们整合起来,即完成了这道题目。

    #include <iostream>
    using namespace std;
    bool isCompNum(int num)
    {// 判断完数,是的话返回true ,不是返回false
        int sum=0;// 存储计算不包含本身的所有因子之和
        for(int i=1;i<num;i++)
        {//遍历 1~num-1
            if(num%i==0) sum+=i;// 如果能整除,则i是num的因子,进行累加求和
        }
        return sum==num;//返回总和与Num的判断结果
    }
    
    void printFactors(int num)
    {// 输出数字num的所有因子
        cout<<num<<" its factors are";
        for(int i=1;i<num;i++)
        {// 遍历1~num-1
            if(num%i==0)//如果i是num的因子
            {
                cout<<" "<<i;
            }
        }
        cout<<endl;
    }
    int main()
    {
        int n;// 存放范围
        cin>>n;// 输入范围
        for(int i=6;i<=n;i++)//最小的完数是6,遍历6~n
        {
            if(isCompNum(i))// 如果是完数
            {
                printFactors(i);//按格式输出所有因子
            }
        }
    
        return 0;
    }
    

    通过这道题目,可以练习自定义函数、枚举法及累加求和的使用。

    不积硅步,无以至千里。
  • 相关阅读:
    How to create jar for Android Library Project
    Very large tabs in eclipse panes on Ubuntu
    64bit Ubuntu, Android AAPT, R.java
    Linux(Ubuntu)下如何安装JDK
    Configure xterm Fonts and Colors for Your Eyeball
    建立、配置和使用Activity——启动其他Activity并返回结果
    建立、配置和使用Activity——使用Bundle在Activity之间交换数据
    建立、配置和使用Activity——启动、关闭Activity
    建立、配置和使用Activity——Activity
    异步任务(AsyncTask)
  • 原文地址:https://www.cnblogs.com/wyloving/p/14004916.html
Copyright © 2011-2022 走看看