LeetCode:面试题 08.05. 递归乘法
Posted tavi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:面试题 08.05. 递归乘法相关的知识,希望对你有一定的参考价值。
面试题 08.05. 递归乘法
题目要求:
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
解题思路:
思路1:直接将乘法分成多个n相加,比较直接暴力;
判断其中较小的数,然后将较大数data相加,一共加n个。
思路2:
1. 巧用位运算,二进制位中,两个相邻位之间差2^1;
2. 同样将两个数分成最大和最小;
3. 通过判断最低位是否为1,进行移位操作,将每次的移位加在一起。
例子:A = 9, B = 7; A x B = 9 x (2^2+2^1+2^0)=9<<2+9<<1+9;
1 class Solution { 2 public: 3 int multiply(int A, int B) 4 { 5 int num=0; 6 return (A > B)? mult(B, A, num):mult(A, B, num); 7 } 8 9 int mult(int n, int data, int &num) 10 { 11 // if (n==1) 12 // { 13 // num=num+data; 14 // return num; 15 // } 16 // num=num+data; 17 // --n; 18 // mult(n, data, num); 19 // return num; 20 if(n== 0) return 0; 21 for (int i=0; n!=0; i++) 22 { 23 if (n&1) 24 { 25 num += data<<i; 26 // data=data<<i; 27 // num +=data;
28 } 29 n=n>>1; 30 } 31 return num; 32 } 33 };
以上是关于LeetCode:面试题 08.05. 递归乘法的主要内容,如果未能解决你的问题,请参考以下文章
万人千题12.8C语言解题报告(关于不用加法的加法的那些事)
#yyds干货盘点# LeetCode程序员面试金典: 递归乘法
C#刷遍Leetcode面试题系列连载: No.38 - 报数
LeetCode 面试题 04.06 后继者[二叉搜索树 递归] HERODING的LeetCode之路