设为首页 加入收藏

TOP

剑指offer48:不用加减乘除做加法
2019-09-03 03:45:28 】 浏览:46
Tags:剑指 offer48 不用 加减乘除 加法

1 题目描述

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

2 思路和方法

  位运算符:两个数异或(^)【1^0=1, 1^1=0, 0^0=0, 0^1=1, 5^5=0, 5^0=5】,相当于每一位相加,而不考虑进位;两个数相与(&)【1&0=0;1&1=1;0&0=0】,并左移一位,相当于求得进位;将上述两步的结果相加。

  我们可以用三步走的方式计算二进制值相加: 5-101,7-111

  第一步:异或(^)相加各位的值,不算进位,101^111得到010。
  第二步:相与(&)计算进位值,各位做与操作得到101,再向左移一位得到1010,即(101&111)<<1得到1010。
  第三步重复上述两步, 各位相加 010^1010=1000,进位值为100=(010&1010)<<1。( 010 & 1010 )相当于( 0010 & b1010 ),位数不一样,前面补0。
  继续重复上述两步:各位相加的值=1000^100 = 1100,进位的值=1000^100 = 0000,进位值为0,跳出循环,1100为最终结果 */

3 C++核心代码  

 1 class Solution {
 2 public:
 3     int Add(int num1, int num2)
 4     {
 5         while(num2!=0){
 6             int sum=num1^num2;
 7             num2=(num1&num2)<<1;
 8             num1=sum;
 9         }
10         return num1;
11     }
12 };
View Code

参考资料

https://blog.csdn.net/feng_zhiyu/article/details/82112291

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇剑指offer44:翻转单词顺序列 下一篇Linux下用C++实现 企业信息管理系..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目