C程序将输入的二进制数字转换为十进制数字
该代码对于输入10001000、101100的输出分别为136和44可以正常工作,但是对于以下情况却失败了
我的代码:
#include <stdio.h>
#include<math.h>
int main() {
int t,i,s,r;
int b;
scanf("%d",&t);
while(t--)
{
scanf("%d",&b);
i=0;
s=0;
while(b!=0)
{
r=b%10;
s=s+r*pow(2,i);
b=b/10;
i++;
}
printf("%d\n",s);
}
return 0;
}
第一个测试用例满足以下条件:
对于输入:
2
10001000
101100
您的输出是:
136
44
以下测试用例不满足,错误如下:
输出错误:
错误的答案。 !!!错误的答案
您的代码可能不适用于多个测试用例(TC)。
您的代码失败的第一个测试用例:
输入:
11111111111
其正确的输出是:
2047
您的代码的输出为:
-3809
有人可以建议我进行必要的更改吗?
答案 0 :(得分:3)
您的代码还有其他几个问题-您试图将字符串“ 11111111111”(11乘以“ 1”)解释为整数。但是,计算机上的整数类型使用4个字节,并且它可以表示的最大数字为2 ^ 31-1。数字11,111,111,111大于2 ^ 33。所以-您得到signed integer overflow的行为。
尝试将您的输入解析为字符串,而不是很大的数字...
但是-下次,请:
number_of_conversions
,而不是t
)。t
上进行外部循环-您只需一次转换就可以证明您的问题。scanf()
可能会失败。答案 1 :(得分:0)
在声明变量时,通过使用增加 int 的范围 int 之前的“unsigned long long”。 使用 scanf 函数时,使用格式说明符“%lld”。