【程序员面试金典】面试题 17.01. 不用加号的加法

【程序员面试金典】面试题 17.01. 不用加号的加法

    • 题目描述
    • 解题思路

题目描述

描述:设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。

示例:

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

提示:

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

解题思路

思路1:最直观的想法是,位运算。使用sum表示当前位,其使用a^b实现;使用carry表示进位,其使用(a&b)<<1实现。为了避免负数出现符号位错误,故进位使用无符号整数,最后退出循环的条件即为进位为0。

int add(int a, int b) 
{
  while(b!=0)
  {
     //当前位
     int sum=a^b;
     //进位
     unsigned int carry=(unsigned int)(a&b)<<1;
     a=sum;
     b=carry;
     bitset<32> c(sum),d(carry);
     cout<

总结:可以使用bitset来调试,bitset<位数> var(需要转换为bitset的数字)。

你可能感兴趣的:(程序员面试金典,面试,职场和发展)