专栏首页猿人谷不用加减乘除做加法

不用加减乘除做加法

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

分析:

第一步:不考虑进位对每一位相加。0加0、1加1的结果都是0,0加1,1加0的结果都是1 。注意到,这和异或的结果是一样的。

第二步:进位,对0加0,0加1,1加0而言,都不会产生进位,只有1加1时,会向前产生1个进位。此时我们刻意想象成是两个数先做位与运算,然后再向左移动一位。

第三步:相加的过程依然是重复前面两步,知道不产生进位为止。

如下是一段基于循环实现的参考代码:

int Add(int num1, int num2)
{
    int sum, carry;
    do{
        sum = num1 ^ num2;
        carry = (num1 & num2) << 1;
        
        num1 = sum;
        num2 = carry;
    }while(num2 != 0);
    
    return num1;
}

相关题目:

不使用新的变量,变换两个变量的值。比如有两个变量a,b,希望交换它们的值。

a = a ^ b;
b = a ^ b;
a = a ^ b;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 和为S的两个数字VS和为s的连续正数序列

    题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。 例如输入数组1、2、4、7、1...

    猿人谷
  • qsort(),sort()排序函数

    一.qsort()函数 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,...

    猿人谷
  • Effective c++ 小结

    最近又重新看了Effective C+,不过到现在还是有好多地方不懂的,先记下笔记,待用的时候再细细琢磨。 条款1:尽量用const和inline而不用#def...

    猿人谷
  • [剑指offer] 不用加减乘除做加法

    尾尾部落
  • 剑指Offer的学习笔记(C#篇)-- 不用加减乘除做加法

    这个题目可以让我们回归到小学,想想加法的竖式是怎么写的,哈哈,如果当时你不是那个竖式写错了,是不是就不在3班了?是不是就不会在这里写什么这这这....

    WeiMLing
  • 简单的搜索引擎搭建

    CodeInHand
  • 卷积神经网络学习笔记

    1.卷积神经网络的图像识别原理: 通过过滤函数 来描绘出图像的边界: 过滤函数和图像相同区域的数值进行相乘,得到新的图像, 新图像则只剩下边图像。 cros...

    企鹅号小编
  • Spark SQL的几个里程碑!

    官方版本是spark 1.0.0引入的Spark SQL模块。当时这个模块的核心实际上就是一种新类型的RDD,叫做SchemaRDD。SchemaRDD就是类型...

    Spark学习技巧
  • 浅说深度学习:核心概念

    用户1737318
  • 大咖论道 | 单霁翔:故宫从文创产品到上元之夜的经营之道

    ? 3月18日,故宫博物院院长单霁翔在石家庄大剧院发表题为《匠者仁心——让故宫文化遗产资源“活起来”》的公益讲座。 在近两个小时的演讲中,单霁翔从管理理念、文...

    腾讯文旅

扫码关注云+社区

领取腾讯云代金券