zoukankan      html  css  js  c++  java
  • 剑指 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;
    }
  • 相关阅读:
    线段树优化dp(elect选择)
    gdb调试
    无参装饰器
    3.23作业
    3.22周末作业
    函数对象与闭包函数
    3.20作业
    3.19作业
    名称空间与作用域
    函数参数的使用
  • 原文地址:https://www.cnblogs.com/peter-jun/p/14488640.html
Copyright © 2011-2022 走看看