題目:輸入二進制串(x < 2^32),輸出十進制值。多行輸入至 EOF。
#include <stdio.h>
#include <string.h>
int main() {
char s[100000];
while (scanf("%s", s) != EOF) {
int n = strlen(s);
unsigned long long ans = 0;
for (int i = n - 1; i >= 0; i--) {
ans += (unsigned long long)(s[i] - '0') << (n - 1 - i);
}
printf("%llu\n", ans);
}
return 0;
}
unsigned long long 保證 64 位,覆蓋 2^32-1。1ULL << k 替代 pow(2, k),無浮點誤差、極快。1 << 31 在 32 位 int 上為負數,必須加 ULL 後綴。x < 2^32 至多 32 位,但緩衝區留大防萬一。Input: 100001 Output: 33 (32+1)