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之路

高频面试题LeetCode 31:递归回溯八皇后全排列一篇文章全讲清楚

Leetcode程序员面试金典面试题04.06.后继者