文章目录
一、预知识点
1、加法
定点数的加法运算,一位全加器的逻辑设计
2、乘法
乘法可以用加法实现
二、题目
1、371. 两整数之和
class Solution {
public:
int getSum(int a, int b) {
int s = a ^ b;
auto c = (unsigned int)(a & b) << 1;
if(c){
return getSum(c, s);
}
return s;
}
};
2、面试题 17.01. 不用加号的加法
class Solution {
public:
int add(int a, int b) {
int s = a ^ b;
auto c = (unsigned int)(a & b) << 1;
if(c){
return add(c, s);
}
return s;
}
};
3、剑指 Offer 65. 不用加减乘除做加法
class Solution {
public:
int add(int a, int b) {
int s = a ^ b;
auto c = (unsigned int)(a & b) << 1;
if(c){
return add(c, s);
}
return s;
}
};
4、面试题 08.05. 递归乘法
class Solution {
public:
int multiply(int A, int B) {
if(A<B){
if(A==0)
return 0;
return B+multiply(A-1,B);
}
return multiply(B,A);
}
};
5、29. 两数相除
在这里插入代码片
6、50. Pow(x, n)
在这里插入代码片
7、69. x 的平方根
class Solution {
public:
int mySqrt(int x) {
for(int i=1;i<=x;i++){
if((i+1)>x/(i+1)){
return i;
}
}
return 0;
}
};
8、面试题 16.07. 最大数值
class Solution {
public:
int maximum(int a, int b) {
int k=1+(((long)a-(long)b)>>63);
return a*k+b*(k^1);
}
};
9、2119. 反转两次的数字
class Solution {
public:
bool isSameAfterReversals(int num) {
if(num==0){
return true;
}
return num%10;
}
};