zoukankan      html  css  js  c++  java
  • 【剑指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;
        }
    };
    
  • 相关阅读:
    iOS.CM5.CM4.CM2
    iOS.Library.Architecture
    iOS.Info.plist
    iOS.ARM-Assembly
    Tools.Png.Compression
    MacDev.GetArchOfLibrary
    iOS.C
    iOS.Notification.Bar.Color
    iOS.-.cxx_destruct
    iOS.UITableView.SectionIndex
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12694497.html
Copyright © 2011-2022 走看看