javascript - 代码检查 3 和 5 的倍数
问题描述
我用javascript写了一个代码来解决这个问题:
“如果我们列出所有小于 10 且是 3 或 5 倍数的自然数,我们会得到 3、5、6 和 9。这些倍数之和是 23。
求 1000 以下所有 3 或 5 的倍数之和。”
但结果是错误的,我不知道为什么?你们能帮帮我吗
我的代码是:
function multipleSum(n){
var sum = 0;
for(var i = 1; i<n; i++){
var m3 = 3 * i;
var m5 = 5 * i;
if(m3 < n ){
sum=sum+m3
}
if(m5 < n ){
sum=sum+m5;
}
//if(m3 > n && m5 > n) {console.log(m3,m5,sum);break;}
}
return sum
}
console.log(multipleSum(1000)) //266333 but correct one is 233168 why?
解决方案
你的逻辑有缺陷。您应该迭代每个数字(在范围内指定),并查看具有 3 或 5 的数字的模数是否为 0。如果模数为零,则表示该数是可整除的。
function multipleSum(n){
var sum = 0;
for(var i = 1; i<n; i++){
if(i % 3 == 0 || i % 5 ==0){ // gives reminder of 0, divisible by either 3 or 5
sum += i; // add in sum if that's the case.
}
}
return sum
}
console.log(multipleSum(1000))
编辑:尝试了一些时间来理解为什么要采用乘法方法,我认为您正在收集因素并希望尽早从循环中突破,而不是迭代整个集合。这应该可以帮助您:
function multipleSum(n){
var sum = 0;
for(var i = 1; i<n; i++){
var m3 = i * 3;
var m5 = i * 5;
if(m3 > n) break; // breaks early!!
if(m3 < n) sum += m3
if(m5 < n && m5 % 3 != 0) sum += m5; // make sure number is not divisible by 3, say m5 = 15, it will be captured as multiple of 3 anyway, we don't want duplicates.
}
return sum
}
console.log(multipleSum(1000))
推荐阅读
- c++ - C++:如何将对象作为模板基类传递给函数
- swift - 如何在类的扩展中引用`class func`中的Self类型
- c# - 使用 OpenXML 将验证器放入现有的已格式化工作表的单元格中
- c++ - 如何在 Windows 中更新 Visual Studio Code 上的 includePath?
- angular - 刷新页面时 CanDeactivateGuard 不起作用
- javascript - 如果父母被隐藏,是否可以计算可见的孩子?
- css - 为什么加粗电压符号⚡︎会显示一个装饰箭头➫(在网络上,带有系统字体)?
- sql - 按字母顺序附加列值
- python - 如何使用 googletrans 在 Python 中翻译 Pandas 系列?
- r - 使用两个数据框创建 geom_tile 图