C语言经典算法实例7:完数

这篇具有很好参考价值的文章主要介绍了C语言经典算法实例7:完数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

一、问题描述

1.1、什么是完数

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。
第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

1.2、完数定义

如果一个数恰好等于它的真因子之和,则称该数为“完全数” 。各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。
例如:
第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。
后面的完全数还有8128、33550336等等。

1.3、本文的问题描述

本文完数
问题的描述
如下几点所示

  1. 输出 1-10000 以内所有完数。
  2. 完数所有的真因子(即除了自身以外的约数)的和恰好等于它本身。
  3. 六是一个完全数,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。

二、算法实例编译环境

本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019
完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

Visual Studio 2019官网链接如下

Visual Studio 2019官网链接
完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

Visual Studio 2019集成的开发环境的特点有

  1. Visual Studio 2019默认安装Live Share代码协作服务。
  2. 帮助用户快速编写代码的新欢迎窗口、改进搜索功能、总体性能改进。
  3. Visual Studio IntelliCode AI帮助。
  4. 更好的Python虚拟和Conda支持。
  5. 以及对包括WinForms和WPF在内的.NET Core 3.0项目支持等

三、算法实例实现过程

3.1、包含头文件

包含头文件 代码如下所示

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>

  • 将要用到的C语言头文件包含近年来。

3.2、声明变量

声明变量 代码如下所示

    // 声明变量
    int i, j, k; 
  • 声明了变量 i, j, k 。

3.3、使用for循环来求1-10000的完数

使用for循环来求1-10000的完数 代码如下所示

	/// <summary>
    /// 使用for循环来求1-10000的完数
    /// </summary>
    /// <returns>无</returns>
    for (i = 1; i < 10000; i++)
    {
        
    }
  • 使用for循环来求1-10000的完数。
  • 求1-10000的完数的具体实现如下几个点所示。

3.4、变量赋值

变量赋值 代码如下所示

 	// 变量赋值, 保证每次循环时sum的初值为0
    int sum = 0;
  • 变量赋值, 保证每次循环时sum的初值为0。
  • 变量赋值进行完数的求解。
    完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

3.5、判断j是否为i的因子

判断j是否为i的因子,代码如下所示

		for (j = 1; j < i; j++)
        {
            /// <summary>
            /// // 判断j是否为i的因子
            /// </summary>
            /// <returns></returns>
            if (i % j == 0)    
            {
                sum += j;
            }
        }
  • 判断j是否为i的因子。

3.6、判断因子数的和是否和原数相等

判断因子数是否和原数相等 代码如下所示

		/// <summary>
        /// 判断因子数的和是否和原数相等
        /// </summary>
        /// <returns></returns>
        if (sum == i)
        {
            printf("%d 的因数是: ", i);

            for (k = 1; k < i; k++)
            {
                if (i % k == 0)
                {
                    printf("%d ", k);
                }
            }
            printf("\n");
        }
  • 判断因子数的和是否和原数相等。
  • 如果因子数的和与原数相等,则这个数是完全数。
  • 如果因子数的和与原数不相等,则这个数不是完全数。

按F5进行编译,调试结果如下所示。

完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

6 的因数是: 1 2 3
28 的因数是: 1 2 4 7 14
496 的因数是: 1 2 4 8 16 31 62 124 248
8128 的因数是: 1 2 4 8 16 32 64 127 254 508 1016 2032 4064

请按任意键继续. . .

  • 可以看到1-10000内的完全数总共有四个。
  • 这几个完数分别是
  • 6 的因数是: 1 2 3
  • 28 的因数是: 1 2 4 7 14
  • 496 的因数是: 1 2 4 8 16 31 62 124 248
  • 8128 的因数是: 1 2 4 8 16 32 64 127 254 508 1016 2032 4064

3.7、对求1-10000内的完数功能进行函数模块化

  • 对求1-10000内的完数采用函数编写的方式。

对求1-10000内的完数功能进行函数模块化 代码如下所示。

3.7.1、对求1-10000内的完数功能进行函数模块化的函数声明

/// <summary>
/// 求完数的函数声明
/// </summary>
void numberPerfect();
  • 声明了求完数的函数。

3.7.2、对求1-10000内的完数功能进行函数模块化的函数定义

对求1-10000内的完数功能进行函数模块化的函数定义 代码如下所示。

/// <summary>
/// 求完数的函数定义
/// </summary>
void numberPerfect()
{
    // 声明变量
    int i, j, k;

    /// <summary>
    /// 使用for循环来求1-10000的完数
    /// </summary>
    /// <returns>无</returns>
    for (i = 1; i < 10000; i++)
    {
        // 变量赋值, 保证每次循环时sum的初值为0
        int sum = 0;

        for (j = 1; j < i; j++)
        {
            /// <summary>
            /// // 判断j是否为i的因子
            /// </summary>
            /// <returns></returns>
            if (i % j == 0)
            {
                sum += j;
            }
        }

        /// <summary>
        /// 判断因子数的和是否和原数相等
        /// </summary>
        /// <returns></returns>
        if (sum == i)
        {
            printf("%d 的因数是: ", i);

            for (k = 1; k < i; k++)
            {
                if (i % k == 0)
                {
                    printf("%d ", k);
                }
            }
            printf("\n");
        }
    }

    printf("\n");
}


  • 将上面几点的功能加入到函数体即可,如上面的函数定义所示。
  • 实现了函数的功能:求1-10000内的完数。
  • 使用for循环的方式。
  • 求1-10000之内的完数。
  • 先求自身的因子数。
  • 在求因子数的和是否与自身相等。

3.7.3、主函数中调用求1-10000内的完数功能的函数numberPerfect

主函数中调用求1-10000内的完数功能的函数numberPerfect 代码如下所示

 	// 调用求完数的函数
    numberPerfect();

按F5进行编译,调试结果如下所示。

完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

四、经典算法实例程序 完整代码

经典算法实例程序完整代码如下所示

4.1、main.h文件

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>


/// <summary>
/// 求完数的函数声明
/// </summary>
void numberPerfect();


4.2、main.c文件

#define _CRT_SECURE_NO_WARNINGS

#include "Main.h"

/// <summary>
/// 主函数
/// </summary>
/// <returns>返回0</returns>
int main()
{
    system("color 3E");

    // 调用求完数的函数
    numberPerfect();

    system("pause");
    return 0;
}

/// <summary>
/// 求完数的函数定义
/// </summary>
void numberPerfect()
{
    // 声明变量
    int i, j, k;

    /// <summary>
    /// 使用for循环来求1-10000的完数
    /// </summary>
    /// <returns>无</returns>
    for (i = 1; i < 10000; i++)
    {
        // 变量赋值, 保证每次循环时sum的初值为0
        int sum = 0;

        for (j = 1; j < i; j++)
        {
            /// <summary>
            /// // 判断j是否为i的因子
            /// </summary>
            /// <returns></returns>
            if (i % j == 0)
            {
                sum += j;
            }
        }

        /// <summary>
        /// 判断因子数的和是否和原数相等
        /// </summary>
        /// <returns></returns>
        if (sum == i)
        {
            printf("%d 的因数是: ", i);

            for (k = 1; k < i; k++)
            {
                if (i % k == 0)
                {
                    printf("%d ", k);
                }
            }
            printf("\n");
        }
    }

    printf("\n");
}





五、总结

本文的C语言经典算法实例:完数,要实现的目标如下

  1. 输出 1-10000 以内所有完数。
  2. 完数所有的真因子(即除了自身以外的约数)的和恰好等于它本身。
  3. 六是一个完全数,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。

完数c语言程序编写,C语言,# C语言经典算法实例,# C语言经典实例,c语言,算法,wpf,C语言经典实例,C语言经典算法实例

文到这里就结束啦。
希望本文的C语言经典算法实例:完数。
能激发你对C语言以及算法学习的热爱。文章来源地址https://www.toymoban.com/news/detail-779575.html

  • 你的支持是对我最大的鼓励。

到了这里,关于C语言经典算法实例7:完数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言程序之经典习题:while循环计算1到一百(100)所有数据之和

    C语言程序之经典习题:while循环计算1到一百(100)所有数据之和 思路:首先是定义两个变量sum和date,数字和1到100的和 引入while循环 目的是使循环到100就停止, 我们一步步来,先来循环出1到100, 然后再来计算1到100的和---sum = sum + date;//累加0到100的和 然后在循环内写出累加

    2024年02月11日
    浏览(40)
  • C语言经典算法实例3:数组元素排序

    求数组的排序 问题的描述 如下几点所示 使用rand()库函数随机生成10个1-100之间的数字。 声明数组的大小为10。 随机生成的10个数字赋值给数组。 给数组内的元素由小到大排序。 本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019 Visual Studio 2019官网链

    2024年02月01日
    浏览(39)
  • C语言经典算法实例4:判断回文数

    判断回文数 问题的描述 如下几点所示 “回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。 在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。 设n是一任意自然数,若将n的各位数字反

    2024年02月02日
    浏览(34)
  • C语言经典算法实例6:斐波那契数列

    斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89… 这个数列从第3项开始,每一项都等于前两项之和。 斐波那契数列的定义者,是意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。 他被人称作“比萨的莱昂

    2024年02月02日
    浏览(44)
  • 数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)

    好家伙,写大作业,本篇为代码的思路讲解   问题描述: 以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。 基本要求: (1) 实现一个以链表做存储的栈类型,

    2024年02月03日
    浏览(40)
  • 【软件设计师07】程序设计语言与语言处理程序基础

    编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多中程序语言特点 (逐渐降低考察比例,很少考察) 概念 文法类型 语法推导树 有限自动机 与正规式(重点) 常见问题:给一个串比如01、10、001等,看图中起点到终点能否连起来得到这样的串 正规式 是有限自

    2023年04月08日
    浏览(59)
  • 【C语言学习2——第一个C语言程序】

    程序员之间有一个约定俗成的习惯,我们在学习任何编程语言时,所写的第一个程序,就是在显示屏上 打印一行字符“Hello World”。 而为什么会有这个习惯呢?这个习惯又是从什么时候开始的呢? 其实,先让我们回顾一下C语言的历史,就可以了解到这个习惯的出处。 1972年

    2023年04月13日
    浏览(76)
  • 【C语言】详解计算机二级c语言程序题

    最近计算机二级的c语言快要考试了,我从网上摘抄了一些c语言二级的原题,并利用gpt做了一些解析来理解这些问题,以便大家能够更好的学习。 同时,我将问题答案设置为白色(只需要选中就可以查看),大家可以在理解问题的同时进行练习。 Dotcpp——里面有C语言原题以

    2024年02月21日
    浏览(37)
  • C语言程序生命周期

    可能大家都知道一个C语言程序需要经过编译生成可执行文件就可以运行起来,但是这并非是一个完整的C语言程序流程,下面我们就详细了解一下C语言程序的整个生命周期。 一个完整C语言的生命周期分为以下五个部分: 编写代码 编译 链接 装载 执行 编写代码是大家最熟悉不过

    2024年02月11日
    浏览(50)
  • C语言程序10题

    第60题 (20.0分)            难度:中        第1章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子       (不包括1与自身)之和。规定n的值

    2024年04月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包