模运算
整除数值
链接: leetcode题目链接
解决这题的原理和汇编中对数字进行求模运算很像,就是采用递推,将数值x
变为a*10+b=(c*10+d)*10+b
以此类推,并将余数存到下一次计算中。
class Solution:
def divisibilityArray(self, word: str, m: int) -> List[int]:
cur = 0 #余数
ans = []
for i in word:
cur = (cur*10+int(i))%m
ans.append(1 if cur==0 else 0)
return ans
位运算
模拟加法
链接: leetcode题目链接
class Solution {
public:
int add(int a, int b) {
int sum = a^b;
b = (a&b)<<1;
a=sum;
while(b!=0){
sum = a^b;
b = (a&b)<<1;
a=sum;
}
return sum;
}
};
这里我们举11+22=33为例:
bin(11)=001011
bin(22)=010110
bin(33)=100001
不妨试一试,不难发现,加法在位运算中的实现方式是两个数的二进制进位信息为两个数的相与在左移一位,不停地循环这个过程,直到有一个数变为0为止。