• 剑指 Offer 65. 不用加减乘除做加法


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

    示例:

    输入: a = 1, b = 1
    输出: 2
     

    提示:

    a, b 均可能是负数或 0
    结果不会溢出 32 位整数

    解析:

    ^ 亦或 ----相当于 无进位的求和, 想象10进制下的模拟情况:(如:19+1=20;无进位求和就是10,而非20;因为它不管进位情况)

    & 与 ----相当于求每位的进位数, 先看定义:1&1=1;1&0=0;0&0=0;即都为1的时候才为1,正好可以模拟进位数的情况,还是想象10进制下模拟情况:(9+1=10,如果是用&的思路来处理,则9+1得到的进位数为1,而不是10,所以要用<<1向左再移动一位,这样就变为10了);

    代码实现

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    class Solution {
    public:
        int add(int a, int b) {
            while(b){
                int carry_bit=(unsigned int)(b&a)<<1;
                a^=b;
                b=carry_bit;
            }
            return a;
        }
    };
    
    int stringToInteger(string input) {
        return stoi(input);
    }
    
    int main() {
        string line;
        while (getline(cin, line)) {
            int a = stringToInteger(line);
            getline(cin, line);
            int b = stringToInteger(line);
    
            int ret = Solution().add(a, b);
    
            string out = to_string(ret);
            cout << out << endl;
        }
        return 0;
    }
  • 相关阅读:
    (二十四)JSP标签之基本标签(<jsp:标签名>)
    (二十三)JSP指令
    (二十二)JSP基础语法
    (二十一)JSP基础
    java类的初始化过程
    redis的主从复制和哨兵支持的主从切换
    redis事务和乐观锁
    redis的持久化
    linux修改进程的名字
    在c代码中获取用户环境变量
  • 原文地址:https://www.cnblogs.com/peter-jun/p/14488640.html
Copyright © 2020-2023  润新知