用c语言写下面代码 S, N = list(reversed(input())), int(input()) s = 0 for i in range(len(S)): s |= (S[i] == '1') << i if s > N: print(-1) else: for i in reversed(range(len(S))): if S[i] == '?' and (s | 1 << i) <= N: s |= 1 << i print(s)
时间: 2023-06-17 19:08:32 浏览: 93
反向输出(c语言代码)
5星 · 资源好评率100%
把 Python 代码转换成 C 代码如下所示:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAX_LEN 100000
// 将字符串翻转并转换成整数数组
void reverse(char *str, int len, int *arr) {
for (int i = 0; i < len; i++) {
arr[i] = str[len - i - 1] - '0';
}
}
int main() {
char str[MAX_LEN + 1];
int n, s = 0, S[MAX_LEN];
scanf("%s%d", str, &n);
int len = strlen(str);
reverse(str, len, S);
for (int i = 0; i < len; i++) {
s |= (S[i] == 1) << i;
if (s > n) {
printf("-1\n");
return 0;
}
}
for (int i = len - 1; i >= 0; i--) {
if (S[i] == -1 && (s | (1 << i)) <= n) {
s |= (1 << i);
}
}
printf("%d\n", s);
return 0;
}
```
注意,因为 Python 中的 int 类型是可以无限长的,而 C 中的 int 类型长度有限,所以在将字符串转换成整数数组时,需要将每个字符转换成一个 int 值,然后将这些值存储在一个数组中。在 Python 中,可以直接使用 `list(reversed(input()))` 翻转字符串,但在 C 中需要自己实现一个函数。在 C 中,可以使用位运算符 `|` 和 `<<` 来实现 Python 中的 `s |= (S[i] == '1') << i` 和 `s |= 1 << i`。另外,Python 中的 `if s > N` 可以直接转换成 C 中的 `if (s > n)`。
阅读全文