求解指定范围完全数时sum=0声明在循环外无结果的原因及资源求助
问题成因解释
完全数的核心计算逻辑是:对每一个待判断的数字,独立计算其所有真因子的累加和,再判断和是否与该数字相等。
你遇到的差异本质是变量初始化时机的问题:
- 当
sum = 0写在遍历范围数字的外层循环外时,sum只会初始化一次,计算完第一个数字的因子和后,sum的值不会清零,会继续累加后续数字的因子,最终sum的数值会远大于当前待判断的数字,永远无法满足sum == 待判断数字的条件,因此没有任何输出。 - 当
sum = 0写在遍历范围数字的内层循环前时,每判断一个新的数字前都会先清空sum的历史值,每个数字的因子和都是独立计算的,符合完全数的判断逻辑,因此可以正常输出结果。
举个简单的验证示例:假设你要判断2~10范围内的完全数
如果sum定义在最外层:
- 判断数字2时,累加因子1,
sum=1,不等于2 - 判断数字3时,不会清空
sum,继续累加因子1,sum=2,不等于3 - 判断数字4时,继续累加因子1、2,
sum=2+1+2=5,不等于4 - 以此类推,
sum会一直累加所有历史因子值,永远不会匹配到符合条件的完全数。
同类练习题推荐
你可以通过以下基础练习巩固变量初始化、循环嵌套的逻辑:
- 实现输出给定范围内的所有水仙花数:水仙花数指三位数,其每位数字的3次幂之和等于它本身,例如
153 = 1³ + 5³ + 3³ - 实现判断给定数字是否为素数的功能,再拓展为输出指定范围内的所有素数
- 实现输入两个正整数,输出它们的最大公约数和最小公倍数
- 实现输出给定范围内的所有回文数:回文数指正读和反读都相同的整数,例如121、1331
内容的提问来源于stack exchange,提问作者Md Anik
相关产品推荐
相关产品推荐

