leetcode解题报告(两数之和,递归乘法)
Posted Shany-Ming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode解题报告(两数之和,递归乘法)相关的知识,希望对你有一定的参考价值。
题目一:两整数之和
给你两个整数
a
和b
,不使用 运算符+
和-
,计算并返回两整数之和。
首先,在不给用加法的情况,我们可以想到位运算,既然是两个数的运算,我们可以先假设a=3,
b=5,(所假设的数字补码同一位必须都是1的情况,不然考虑不全面)然后对这两数分别进行位运算,你会发现,异位是最接近的
两位为1变0,但没进位,接下来就要考虑进位,找到都为一的位数,那么就是按位与了,将按位与的往左挪一,再按位或,这就是此题解法
int getSum(int a, int b)
int c;
while(b)
c=(unsigned int)(a&b)<<1;
a^=b;
b=c;
return a;
此题图解,必须定义c变量否则异或的不是上一轮b的值。
2.递归乘法
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
既然能使用+-号,那么就不需要位运算了(位运算太难想了),我们就用乘法的本质,一个数×几就等于几个这样的数相加
int multiply(int A, int B)
if(B>0)
return multiply(A,B-1)+A;
return 0;
以上是关于leetcode解题报告(两数之和,递归乘法)的主要内容,如果未能解决你的问题,请参考以下文章
万人千题12.8C语言解题报告(关于不用加法的加法的那些事)
⭐算法入门⭐《二叉树 - 二叉搜索树》简单01 —— LeetCode 653. 两数之和 IV - 输入 BST