关闭

#1 A + B Problem

标签: lintcodebit manipulation
76人阅读 评论(0) 收藏 举报
分类:

题目描述:

Write a function that add two numbers A and B. You should not use + or any arithmetic operators. 

 Notice

There is no need to read data from standard input stream. Both parameters are given in function aplusb, you job is to calculate the sum and return it.

Clarification

Are a and b both 32-bit integers?

  • Yes.

Can I use bit operation?

  • Sure you can.
Example

Given a=1 and b=2 return 3


题目思路:

这题如果会bit manipulate会很简单,不会就很心酸。我参考了九章上的答案提示,如下:

// 主要利用异或运算来完成 
        // 异或运算有一个别名叫做:不进位加法
        // 那么a ^ b就是a和b相加之后,该进位的地方不进位的结果
        // 然后下面考虑哪些地方要进位,自然是a和b里都是1的地方
        // a & b就是a和b里都是1的那些位置,a & b << 1 就是进位
        // 之后的结果。所以:a + b = (a ^ b) + (a & b << 1)
        // 令a' = a ^ b, b' = (a & b) << 1
        // 可以知道,这个过程是在模拟加法的运算过程,进位不可能
        // 一直持续,所以b最终会变为0。因此重复做上述操作就可以
        // 求得a + b的值。
Mycode (AC = 10ms):

class Solution {
public:
    /*
     * @param a: The first integer
     * @param b: The second integer
     * @return: The sum of a and b
     */
    int aplusb(int a, int b) {
        // write your code here, try to do it without arithmetic operators.
        int sum = a, carry = b;
        while (carry != 0) {
            int _sum = sum ^ carry;
            int _carry = (sum & carry) << 1;
            sum = _sum;
            carry = _carry;
        }
        return sum;
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14818次
    • 积分:2255
    • 等级:
    • 排名:第17329名
    • 原创:221篇
    • 转载:1篇
    • 译文:0篇
    • 评论:10条
    文章分类
    文章存档