首页 > 代码库 > 48、剑指offer--不用加减乘除做加法
48、剑指offer--不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路:例如5+17转化成二进制即为101+10001
1)不考虑进位101 + 10001 = 10100
2)进位1+1 = 10
3)相加10100+10 = 10110 =22
所以分别算不考虑进位和进位的相加即可,其中不考虑进位相当于异或操作0^0 = 0 0^1 = 1 1^0 = 1 1^1 =0,进位操作相当于先求&再左移1 1&1 = 1 1<<1 = 10
1 class Solution { 2 public: 3 int Add(int num1, int num2) 4 { 5 int sum = 0;//不考虑进位和 6 int carry = 0;//进位结果 7 while(num2 != 0)//直到不产生进位结束循环 8 { 9 sum = num1^num2; 10 carry = (num1&num2)<<1; 11 num1 = sum; 12 num2 = carry; 13 } 14 return num1; 15 } 16 };
48、剑指offer--不用加减乘除做加法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。