标签:com tip 移位 ref 函数 乘法 正整数 个数 multi
题目要求:
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
解题思路:
思路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 };
标签:com tip 移位 ref 函数 乘法 正整数 个数 multi
原文地址:https://www.cnblogs.com/Tavi/p/12515942.html