#1 A + B Problem

原创 2016年08月30日 13:24:43

题目描述:

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;
    }
};


版权声明:三千微尘里,吾宁爱与憎

相关文章推荐

Problem B: Minesweeper(1)

好像是类似扫雷什么的,也不清楚,反正就是会做,不过,刚开始的时候,数据的输入让我纠结了一会对字符型数组输入数据,每行结束的时候应用getchar()接受键入键 #include int main() ...

Codeforces Round #383 (Div. 1) Problem B.Arpa's weak amphitheater and Mehrdad's valuable Hoses 解题报告

题目链接:Here! 题目大意:一个人家里有一个剧场,但是这个剧场只能承受一定的重量。这个人想要邀请一些人到他家里玩,这些人中有一部分人相互是朋友,把相互是朋友的人看做一个集合,那么对于这个集合,要...

1:A+B Problem

总时间限制: 1000ms 内存限制: 65536kB 描述 Calculate a + b 输入Two integer a,,b (0 ≤ a,b ≤ 10) 输出Outpu...

RCC 2017 Qual 1 Mail.Ru, April 2, 2017 Problem B. Painting the Wall

Problem B. Painting the Wall题意:有一个n*m的墙,0为灯,不能涂颜料,1为瓷砖。问用k种颜色的颜料,使得连通的线段上没有重复的颜色。...

Codeforces Round #343 (Div. 2) B. Far Relative’s Problem(O(1)的线段标记)

time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandar...

2016"百度之星" - 资格赛(Astar Round1)(Problem-B)(Java 水)

Problem B    Accepts: 1884    Submissions: 7013  Time Limit: 2000/1000 MS (Java/Others)    Memory L...

Google Code Jam 2015 Round 1A: Problem B. Haircut

蒟蒻看到这一题只想到了模拟==看了analysis后才恍然大悟竟然是二分==其实单调性也挺明显的额肯定是时间越长serve的人越多。> 首先,对于每一个时间点time,可以求出来此刻serve的人数。...
  • yixin94
  • yixin94
  • 2015年04月26日 12:15
  • 577

2016"百度之星" - 资格赛(Astar Round1)Problem A B C D--java代码

Problem Description 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符...
  • y999666
  • y999666
  • 2016年05月15日 20:50
  • 892

[GCJ] 2011 Round 1B Problem A RPI

信心满满的打开题目,结果题目没读懂!OWP的定义看了一遍又一遍楞是没明白怎么个求法,难道是半夜太困了?我一直觉得我的英文水平还算可以的。。。都怪那个throwing out,直接用excluding多...

Codeforces Round #296 (Div. 1)B---Clique Problem

The clique problem is one of the most well-known NP-complete problems. Under some simplification it ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:#1 A + B Problem
举报原因:
原因补充:

(最多只允许输入30个字)