我想计算num2在num1中出现的次数。这两个数字最多可以是32位。
给定一个无符号的32位整数,计算模式101的出现次数(最多可以是32位((仅使用逐位运算编写程序(这些编号最多可以是32位
100101->1次1010110101->4次
此代码适用于字符串,而不是二进制编号的最佳字符串
uint32_t ReturnCount(string num1,string num2) {
int n = num1.length(); int m = num2.length();
int count=0;
for (int i = 0; i <= n-m ; ++i)
{
int j ;
for (j=0; j < m; ++j)
{
if (num1[i + j] != num2[j])
break;
}
if (j == m)
{
count ++;
j=0;
}
}
return count;
}
以下是一种可能的方法。
- 使用std::bit_width计算
num1
和mum2
的宽度 - 如果
num1
的宽度小于num2
的宽度,则不匹配 - 创建宽度为
num2
的掩码
uint32_t mask = (1 << width) - 1;
- 在循环中开始匹配:
if(num2 == (num1 & mask)) // found a match
- 将
num2
和mask
都向左移动一个 - 如果移位数(5(大于
num1
和num2
之间的宽度差,则完成