C语言——完数难题(头歌编程刷题)

发布时间:2023年12月17日

?

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
生命如同寓言,其价值不在于长短,而在与内容!

一起加油!

目录

一、题目描述

二、输入输出格式

三、输入输出样例1

四、输入输出样例2

五、说明提示

六、题目分析:

七、思路分析: 数学思路分析:

八、代码思路分析:

九、实现方法:

十、代码附上:?


一、题目描述

????????小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 1 的正整数的所有因子之和等于它的本身,则称这个数是完数,比如 628 都是完数:6=1+2+328=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮帮他。

二、输入输出格式

输入格式 输入包含两个正整数 n1n2 ,表示题目描述中的数据范围。 正整数之间以空格间隔。 输出格式 针对输入,请打印出 n1n2 之间(包括边界)存在的完数个数。

三、输入输出样例1

输入 2 5

输出 0

四、输入输出样例2

输入 5 7 输出 1

五、说明提示

1<n1,n2<10000

六、题目分析:

  • 数学题,如何判断一个数是否为完数,从1到该数之前,遍历取,然后判断该数是否可以将其整除,可以的话将这些除数求和,判断是否等于该数,等于的话则该数为完数,否则不是。

七、思路分析: 数学思路分析:

  • 根据完数的定义可以得知:把一个数所有能整除他的因子加起来之和等于他本身即为完数。

八、代码思路分析:

  • 用一个函数进行判断是否为完数,从1到该数之前,遍历取,然后判断该数是否可以将其整除,可以的话将这些除数求和。然后外面一个循环进行计数,每有一个完数则加1。

九、实现方法:

  • 使用两个循环,一个用于判断是否为完数,另一个函数进行计数。

十、代码附上:?

#include <stdio.h>
int main(){
    int m,n;
    int sum;
    int count;
    int i,j;
    scanf("%d%d",&m,&n);
    count=0;
    for(i=m;i<=n;i++){
    	 //遍历给定范围,判断是否为完数
        sum=0;
        for(j=1;j<=i/2;j++){
        	//从1到该数一半开始循环判断
            if(i%j==0){
            	//可以整除,累积求和
                sum+=j;
            }
        }
        if(sum==i){
        	//和等于i,则该数为完数,计数+1
            count++;
        }
    }
    //打印结果
    printf("%d",count);
    return 0;
}
文章来源:https://blog.csdn.net/2301_80585598/article/details/135047902
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。