• 【剑指offer】不用加减乘除做加法


    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27966641

    题目描写叙述:

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

    输入:

    输入可能包括多个測试例子。
    对于每一个測试案例,输入为两个整数m和n(1<=m,n<=1000000)。

    输出:

    相应每一个測试案例,输出m+n的值。

    例子输入:
    3 4
    7 9
    例子输出:
    7
    16
        思路:

        1、先将各bit位相加,不计进位,这一步能够用m^n实现

        2、加上进位,进位怎样来,用m&n能够得到m和n中都为1的bit位,而不全为1的位则所有变为了0,该位相加会发生进位,使得左边一位加1,因此(m&n)<<1边可得到进位后要加的1的位置;

        3、将前面两步的结果相加,相加的时候还有可能再产生进位,因此二者相加的过程能够再次反复循环步骤1和2,直到(m&n)<<1变为了0,这时候不会再产生进位,退出循环就可以。

        代码例如以下:

    #include<stdio.h>
    
    int AddNumThoughBit(int a,int b)
    {
    	int sum; //不含进位的和
    	int add1; //进位
    
    	while(b != 0)
    	{
    		sum = a^b;
    		add1 = (a&b)<<1;
    		a = sum;
    		b = add1;
    	}
    	return a;
    }
    
    int main()
    {
    	int m,n;
    	while(scanf("%d %d",&m,&n) != EOF)
    		printf("%d
    ",AddNumThoughBit(m,n));
    }
    /**************************************************************
        Problem: 1507
        User: mmc_maodun
        Language: C
        Result: Accepted
        Time:10 ms
        Memory:912 kb
    ****************************************************************/

  • 相关阅读:
    创建用户自定义函数 SQL
    sql with as 用法
    将string转为同名类名,方法名。(c#反射)
    linq 实现对象映射
    sql 游标
    C#编程总结(六)异步编程
    线程加锁解锁,用于循环条件不确定大小
    滚动条随代码滚动
    C# 代码小技巧
    reload方法
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3930652.html
Copyright © 2020-2023  润新知