• 【剑指Offer】面试题65. 不用加减乘除做加法


    题目

    写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

    示例:

    输入: a = 1, b = 1
    输出: 2
    

    提示:

    • a, b 均可能是负数或 0
    • 结果不会溢出 32 位整数

    思路

    普通十进制相加过程:
    (1)各位相加,无进位(2)计算进位值(3)无进位和加上进位值
    二进制相加过程:
    (1)两个二进制数异或模拟无进位相加,得到无进位和(2)二进制各位与再左移,计算进位(3)无进位和与进位异或
    重复以上操作,直到进位不为0。

    代码

    时间复杂度:O(1)
    空间复杂度:O(1)

    class Solution {
    public:
        int add(int a, int b) {
             int sum, carry;
             while (b != 0) {
                 sum = a ^ b;
                 carry = (unsigned int)(a & b) << 1;//表示进位
                 a = sum;
                 b = carry;
             }
             return a;
        }
    };
    
  • 相关阅读:
    Tyvj 1729 文艺平衡树
    送花
    Tyvj 1728 普通平衡树
    [NOI2004]郁闷的出纳员
    [HNOI2004]宠物收养所
    [HNOI2002]营业额统计
    [NOIP2012] 借教室
    无聊的数列
    忠诚
    XOR的艺术
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12694497.html
Copyright © 2020-2023  润新知