JavaScript题解2652.倍数求和|容斥原理

解题思路

在JavaScript中计算7/3*3,结果是7,而不是6。这是因为JavaScript中除法运算符(/)得到的结果是一个浮点数,而不是一个整数。

具体来说,7/3得到的结果是2.3333…,然后再乘以3得到7.0000…,由于JavaScript采用IEEE 754浮点数标准,所以会对小数进行四舍五入,最终结果为7。

建立sum函数,执行单一功能(求一个数的所有倍数)。

原sumOfMultiples函数,返回所有的计算结果。

时间复杂度为 O(1)

代码

/**
 * @param {number} n
 * @return {number}
 */
var sumOfMultiples = function(n) {
    return sum(n,3) + sum(n,5) + sum(n,7) 
    - sum(n,21) - sum(n,35) - sum(n,15) + sum(n,105)
};

var sum = function(n, m) {
    return ((m +(n-n%m)) * Math.floor(n/m)) / 2
}


容斥原理

什么是容斥原理?

  • 所谓容斥原理就是数学中的,交集并集的观念,相同的部分会在不同的公式里面重复执行,需要对相同的部分做差剪掉,同理相同部分重叠两次剪掉的部分也要加回来。

形如:

image.png


疑问

为什么有些编译器出来的 7/3*3是 7 而不是 6 ?

  • 首先,编译器出来的应该都是 6,因为计算机根据算数运算顺序,从左往右,优先级高的先执行,
  1. 7/3 = 2 (我们都知道 / 是一个向下取整的除法运算)
  2. 2*3 = 6 (理应得6)

为什么会有 7?

  • 我来用另外一个计算方式算一遍
  1. 7/3 = 2 – 1 (得 2 余 1)
  2. 2*3 = 6 + 1 = 7(得 6 加 余数 1 得 7)

首先,计算机里面肯定不是这么算的,就如前面得解题说的一样,7/3得到的结果是2.3333...,然后再乘以3得到7.0000...,由于JavaScript采用IEEE 754浮点数标准,所以会对小数进行四舍五入,最终结果为7

在这里我用这种方式(人算讲解了一遍,以便得出相同得结果)


应用

应用过程中我们可以用 Math.floor()ParseInt() 解决进度和向下取整问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THIM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值