写一个c语言,输入十六进制字符串,返回该十六进制字符串转换为二进制中最长连续1的个数的代码
时间: 2025-06-27 15:07:18 浏览: 23
下面是一个完整的 C 程序,可以实现将十六进制字符串作为输入,并计算其对应的二进制表示中最长连续的 '1' 的个数。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
int maxConsecutiveOnes(unsigned int num) {
int count = 0;
int maxCount = 0;
while (num > 0) {
if ((num & 1) == 1)
count++;
else {
if (count > maxCount)
maxCount = count;
count = 0; // reset the counter when encounter a zero.
}
num >>= 1; // Shift right by one bit to check next digit in binary form.
}
if (count > maxCount)
maxCount = count;
return maxCount;
}
unsigned int hexToDec(const char* str) {
unsigned int result = 0;
for(int i=0;i<strlen(str);i++) {
char c = str[i];
if(c >= '0' && c <= '9')
result = result * 16 + (c - '0');
else if(c >= 'A' && c <= 'F')
result = result * 16 + (c - 'A' + 10);
else if(c >= 'a' && c <= 'f')
result = result * 16 + (c - 'a' + 10);
else {
printf("Invalid character '%c'\n", c);
exit(1);
}
}
return result;
}
int main(){
char inputStr[50];
printf("请输入一个十六进制字符串:");
scanf("%s",inputStr);
unsigned int decNum = hexToDec(inputStr);
int longestOneSeqLen = maxConsecutiveOnes(decNum);
printf("最长连续1的数量:%d\n",longestOneSeqLen);
return 0;
}
```
### 功能解释:
- 首先编写了一个名为 `maxConsecutiveOnes` 的辅助函数来查找整型数值在其二进制形式下的最大连续‘1’序列。
- 接着实现了另一个名为 `hexToDec` 函数把给定的有效 Hex 字符串转换成十进制值(实际上是无符号整数)。
- 最后在主函数部分综合以上两个步骤完成了目标需求即获取并打印结果。
阅读全文
相关推荐




















