zoukankan      html  css  js  c++  java
  • 剑指Offer的学习笔记(C#篇)-- 不用加减乘除做加法

    题目描述

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

    一 . 理解题目

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

            回归题目:加法的竖式无非三步走,一、个位数相加;二、个位数进位(或者不进位);三、十位数相加。后面的都是一样了,不一一赘述。

            但是,此题目不可用加减乘除,所以要借用二进制数的位运算符。当然目的也是和上面一样,相加(^)与进位(&配合<<1)!!

            该题目必须要理解位运算符,可查看这里

            第一步:相加不进位(^ 完成)

            第二部:进位(&配合<<1)

            第三部:判断(当在第二部得出进位的数是0的时候,就可以输出了)

    二 . 代码实现

    class Solution
    {
        public int Add(int num1, int num2)
        {
            // write code here
            while(num2!=0)
            {
                //不进位的二进制加法
                int sum=num1^num2;
                //把位运算符&理解成逻辑运算与;<<为左移运算符,后面跟几就移动几位
                int carray=(num1&num2)<<1;
                num1=sum;
                num2=carray;
            }
            return num1;
        }
    }
  • 相关阅读:
    Pretty girl,你一定要去旅行
    难受就哭,开心就笑
    你对你的大学生活满意吧
    [leetCode]575. 分糖果
    [leetCode]383.赎金信
    242. 有效的字母异位词
    [leetCode]538. 把二叉搜索树转换为累加树
    [leetCode]面试题 02.07. 链表相交
    [leetCode]206. 反转链表
    [leetCode]707. 设计链表
  • 原文地址:https://www.cnblogs.com/WeiMLing/p/10964931.html
Copyright © 2011-2022 走看看