zoukankan      html  css  js  c++  java
  • 《剑指offer》第六十五题:不用加减乘除做加法

    // 面试题65:不用加减乘除做加法
    // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷
    // 四则运算符号。
    
    #include <cstdio>
    
    int Add(int num1, int num2)
    {
        int sum = 0; //
        int carry = 0; //进位
    
        do
        {
            sum = (num1 ^ num2); //位异或求和, 无进位
            carry = (num1 & num2) << 1; //产生进位的位置左移1
            
            num1 = sum;
            num2 = carry;
    
        } while (num2 != 0); //问题转换为sum和进位carry的求和问题,当不产生进位时跳出
    
        return num1;
    }
    // ====================测试代码====================
    void Test(int num1, int num2, int expected)
    {
        int result = Add(num1, num2);
        if (result == expected)
            printf("%d + %d is %d. Passed
    ", num1, num2, result);
        else
            printf("%d + %d is %d. FAILED
    ", num1, num2, result);
    }
    
    int main(int argc, char* argv[])
    {
        Test(1, 2, 3);
        Test(111, 899, 1010);
    
        Test(-1, 2, 1);
        Test(1, -2, -1);
    
        Test(3, 0, 3);
        Test(0, -4, -4);
    
        Test(-2, -8, -10);
    
        return 0;
    }
    测试代码

    分析:分析过程很重要。

    class Solution {
    public:
        int Add(int num1, int num2)
        {
            int sum = 0;
            int carry = 0;
            
            do
            {
                sum = (num1 ^ num2);
                carry = (num1 & num2) << 1;
                
                num1 = sum;
                num2 = carry;
            } while (num2 != 0);
            
            return num1; 
        }
    };
    牛客网提交代码
  • 相关阅读:
    qt用mingw编译时报错 multiple definition of
    作用域详解
    webpack-dev-server
    前端致命错误汇总
    那些我不知道的基础知识
    常见英语词汇第一记
    CSS权重;慎用!important
    校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)
    同源策略
    用CSS实现梯形图标
  • 原文地址:https://www.cnblogs.com/ZSY-blog/p/12694679.html
Copyright © 2011-2022 走看看