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

    // 面试题65:不用加减乘除做加法
    // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷
    // 四则运算符号。
    
    #include <iostream>
    
    int Add(int num1, int num2)
    {
        int sum, carry;
        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);
        system("pause");
        return 0;
    }

  • 相关阅读:
    Oracle 单引号与双引号的区别
    oracle 生成随机数
    oracle 表空间及查看所有用户的表空间
    字节和字符的区别
    java io
    Oracle 基础
    gvim 常用键
    Python之struct
    Python之MySQLdb
    Python之sqlite3
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10550109.html
Copyright © 2011-2022 走看看