首页 > 其他 > 详细

LintCode A + B Problem

时间:2016-01-15 16:04:36      阅读:135      评论:0      收藏:0      [点我收藏+]

原题链接在这里:http://www.lintcode.com/en/problem/a-b-problem/

不让用 数学运算符,就用位运算符。

a的对应位 ^ b的对应位 ^ carry 就是res中的对应位。

carry 更新为0还是1要分别讨论。

Time Complexity: O(1), 一共32位. Space: O(1).

AC Java:

 1 class Solution {
 2     /*
 3      * param a: The first integer
 4      * param b: The second integer
 5      * return: The sum of a and b
 6      */
 7     public int aplusb(int a, int b) {
 8         // write your code here, try to do it without arithmetic operators.
 9         int res = 0;
10         int carry = 0;
11         for(int i = 0; i<32; i++){
12             int aCur = (a>>i) & 1;
13             int bCur = (b>>i) & 1;
14             res |= (aCur ^ bCur ^ carry) << i;
15             if((aCur == 1 && bCur == 1) || ((aCur == 1 || bCur == 1) && carry == 1)){
16                 carry = 1;
17             }else{
18                 carry = 0;
19             }
20         }
21         return res;
22     }
23 };

 

LintCode A + B Problem

原文:http://www.cnblogs.com/Dylan-Java-NYC/p/5133292.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!