关于符合特定规则的数值求和计算方法及算法实现正确性的问询
算法验证与修正:3的倍数特殊求和计算
问题需求
需要实现一个满足以下规则的求和算法(输入均为正整数):
- 计算传入数组中所有数字的总和
- 若数字是3的倍数,需先将其加1再计入总和
你的代码问题分析
你写的循环逻辑是正确的,能够判断3的倍数并执行加1操作,但核心错误是最后返回的是固定值0,而不是计算好的总和sum,导致无论输入什么数组,最终输出都是0。
原代码:
function calculator(numbers) { let sum=0; for(let num of numbers){ if(num % 3 == 0) { sum+=num + 1 } else { sum+=num; } } return 0; // 这里错误,应该返回sum } console.log(calculator([3,6,7,9,13,22,27]))
修正后的代码
只需要将return 0改为return sum即可得到正确结果:
function calculator(numbers) { let sum = 0; for (let num of numbers) { if (num % 3 === 0) { sum += num + 1; } else { sum += num; } } return sum; // 返回计算后的总和 } // 测试输入的计算结果:3→4,6→7,7→7,9→10,13→13,22→22,27→28,总和为4+7+7+10+13+22+28=91 console.log(calculator([3,6,7,9,13,22,27])) // 输出91
更简洁的实现方式
可以使用数组的reduce方法简化代码,逻辑和循环版本完全一致:
function calculator(numbers) { return numbers.reduce((total, num) => { return total + (num % 3 === 0 ? num + 1 : num); }, 0); } console.log(calculator([3,6,7,9,13,22,27])) // 同样输出91
内容的提问来源于stack exchange,提问作者Bachir
相关产品推荐
相关产品推荐

