剑指 Offer 64. 求1+2+…+n

题目描述

求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

解题思路

  • 从题解里学到了一种拆位乘法的技巧,如果两数相乘超过了最大范围,可以用拆位乘法,对每次运算结果进行取模运算

知识点

位运算,数学

代码

  1. class Solution {
  2. public:
  3. int quickMulti(int A, int B) {
  4. int ans = 0;
  5. for ( ; B; B >>= 1) {
  6. if (B & 1) {
  7. ans += A;
  8. }
  9. A <<= 1;
  10. }
  11. return ans;
  12. }
  13. int sumNums(int n) {
  14. return quickMulti(n, n + 1) >> 1;
  15. }
  16. };

参考资料

  1. leetcode官方题解