C语言——完数难题(头歌编程刷题)
2023-12-17 19:44:52
?
归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
生命如同寓言,其价值不在于长短,而在与内容!
一起加油!
目录
一、题目描述
????????小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 1
的正整数的所有因子之和等于它的本身,则称这个数是完数,比如 6
,28
都是完数:6=1+2+3
;28=1+2+4+7+14
。请判断两个正整数之间完数的个数。小明想请聪明的你帮帮他。
二、输入输出格式
输入格式 输入包含两个正整数 n1
和 n2
,表示题目描述中的数据范围。 正整数之间以空格间隔。 输出格式 针对输入,请打印出 n1
和 n2
之间(包括边界)存在的完数个数。
三、输入输出样例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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!