
二进制转化为十进制有一部分测试点错了,但是不知道为什么,二进制总的不超过31位
long long类型的最大值是9,223,372,036,854,775,807,长度最大只有19位,但是你的题目测试数据长度最大是31位,当测试样例的长度超过19位时,会超出long long 类型能读取的数据范围,会导致读取数据失败。
修改方法是二进制用字符数组读取,不要使用long long读取。
代码修改如下:
#include <stdio.h>
#include <string.h>
int main() {
char a[32] = { 0 }; //用来读取数据
int n, j, k; //二进制最大长度不超过31位,所以不会超过int类型范围,用int类型即可
int i;
int count = 0;
int sum = 0; //保存十进制数
scanf("%s", a); //读取二进制
count = strlen(a); //获取二进制长度
//从低位遍历二进制
k = 0; //计算幂次
n = 1; //幂次
for (i = count - 1; i >= 0; i--) {
if (k == 0) //这部分就是计算幂次,用pow函数也行
n = 1;
else
n = n * 2;
sum += (a[i] - '0') * n;
k++;
}
printf("%d", sum);
return 0;
}