怎么快速求一个十六进制数转换成二进制后0的个数 用c++实现 注意:十六进制数的位数最高可以达到10^7,要求时间复杂度小于10^7求出
时间: 2024-05-08 20:20:59 浏览: 21
可以先将十六进制数转换成二进制数,然后统计二进制数中0的个数即可。具体实现可以使用位运算,每次将数的最后一位与1相与,判断是否为0,如果是,则计数器加1,否则右移一位继续判断。代码如下:
```c
#include <stdio.h>
int countZeros(char* hex) {
int count = 0;
int i = 0;
while (hex[i] != '\0') {
char c = hex[i];
int num;
if (c >= '0' && c <= '9') {
num = c - '0';
} else if (c >= 'a' && c <= 'f') {
num = c - 'a' + 10;
} else if (c >= 'A' && c <= 'F') {
num = c - 'A' + 10;
} else {
return -1; // 非法字符
}
for (int j = 0; j < 4; j++) {
if ((num & 1) == 0) {
count++;
}
num >>= 1;
}
i++;
}
return count;
}
int main() {
char hex[10000001]; // 最高可以达到10^7,所以要开足够大的数组
scanf("%s", hex);
printf("%d\n", countZeros(hex));
return 0;
}
```
其中,countZeros函数用于统计0的个数,hex数组存储输入的十六进制数。时间复杂度为O(n),其中n为十六进制数的位数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)