剑指 Offer 64. 求1+2+…+n
题目描述
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路
- 从题解里学到了一种拆位乘法的技巧,如果两数相乘超过了最大范围,可以用拆位乘法,对每次运算结果进行取模运算
知识点
位运算,数学
代码
class Solution {public:int quickMulti(int A, int B) {int ans = 0;for ( ; B; B >>= 1) {if (B & 1) {ans += A;}A <<= 1;}return ans;}int sumNums(int n) {return quickMulti(n, n + 1) >> 1;}};
