AcWing 85 不用加减乘除做加法
发布日期:2021-05-28 16:31:09 浏览次数:9 分类:技术文章

本文共 535 字,大约阅读时间需要 1 分钟。

题目描述:

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

样例

输入:num1 = 1 , num2 = 2输出:3

分析:

 我们在对两个二进制数做加法的时候,相当于先对各位做异或运算,然后如果对应位是两个1,则需要进位,对应于&运算。

所以求两个数的和可以分解为先求对应位的异或结果再求对应位的与结果,将与结果左移一位得到carry再加上异或结果sum即可得到加法结果。这里的加法同样采用上述方法来解决。每次对carry左移即在末位补零,所以carry每次迭代时0的位数是在增加的,知道carry=0,即没有进位的时刻停止迭代,此时的sum即是所求的加法和。

class Solution {public:    int add(int num1, int num2){        while(num2){            int sum = num1 ^ num2;            int carry = (num1 & num2) << 1;            num1 = sum;            num2 = carry;        }        return num1;    }};

 

转载地址:https://blog.csdn.net/qq_30277239/article/details/88643603 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:AcWing 86 构建乘积数组
下一篇:AcWing 84 求1+2+…+n

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年02月03日 04时42分24秒