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

简介: 弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复。【题目】剑指offer写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。【思路】直觉想到用二进制的位运算。

弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复。

【题目】
剑指offer

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

【思路】
直觉想到用二进制的位运算。最后写出来是一个迭代的过程。
每次迭代先计算x和y的和但不处理进位,那么相当于做异或,得到res1
然后处理进位问题,相当于计算与运算,得到res2
那么res2左移1位,再加到res1上,则整个运算的最终结果转化为res1+(res2<<1)
因为res2做左移,总会减小到0,那时候的res1就是最终结果

class Solution{
public:
    int Add(int x, int y){
        int sum;
        int carry;

        while (true){
            sum = x^y;
            carry = (x&y) << 1;
            y = carry;
            x = sum;
            if (y == 0){
                break;
            }
        }
        return sum;
    }
};
目录
相关文章
|
5月前
|
Serverless C语言
C语言----递归函数,计算一个非负整数的数字之和
C语言----递归函数,计算一个非负整数的数字之和
|
6月前
|
存储 算法
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
65 1
|
12月前
|
编译器 C语言
易错的运算符
易错的运算符
|
存储 编译器 C语言
C语言(二) 补码,运算值与表达式
C语言(二) 补码,运算值与表达式
159 0
wustojc2002整数四则运算
wustojc2002整数四则运算
63 0
|
编译器 C语言 C++
学C的第十六天【操作符详解:9. 条件操作符;10. 逗号表达式;11. 下标引用,函数调用和结构函数;12.表达式求值:整型提升、算术转换、操作符的属性;练习:使用函数完成整型函数的打印、元素逆置】-2
12.表达式求值 1. 表达式求值的顺序一部分是由操作符的优先级和结合性决定。 2. 有些表达式的操作数在求值的过程中可能需要转换为其它类型。
101 0
|
存储 算法
每日一题——逆波兰表达式求值(前缀、中缀、后缀表达式的说明,库函数atoi()的解析)
每日一题——逆波兰表达式求值(前缀、中缀、后缀表达式的说明,库函数atoi()的解析)
|
存储 算法
逆波兰表达式:计算包含括号的四则运算表达式
平时我们进行数学计算使用的常见书写方式就是中缀表达式,即每一个运算符号都位于计算数的中间,如下: (1+2)\3 而这对于计算机进行求取结果来说,并不是一个最优的方案。
117 0
|
C语言
写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算
写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算
207 0
写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算