二进制到十进制转换C代码-满足特定测试用例的问题

二进制到十进制转换C代码-满足特定测试用例的问题,c,C,C程序将输入的二进制数转换成十进制数 对于输出分别为136和44的输入10001000、101100,代码工作正常,但对于 我的代码: #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;

C程序将输入的二进制数转换成十进制数

对于输出分别为136和44的输入10001000、101100,代码工作正常,但对于

我的代码:

#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;
}
#包括
#包括
int main(){
int t,i,s,r;
int b;
scanf(“%d”、&t);
而(t--)
{
scanf(“%d”和“b”);
i=0;
s=0;
而(b!=0)
{
r=b%10;
s=s+r*pow(2,i);
b=b/10;
i++;
}
printf(“%d\n”,s);
}
返回0;
}
第一个测试用例满足如下要求:
输入:
2
10001000
101100
您的输出是:
136
44
以下测试用例不满足,错误如下:
输出错误:
回答错了!!!错误答案
对于多个测试用例(TC),您的代码可能无法正常工作。
代码失败的第一个测试用例:

输入:
11111111

其正确输出为:
2047年

代码的输出是:
-3809

有人能给我建议一些必要的修改吗?

除了代码中的其他问题外,您正在尝试将字符串“11111111”(11乘以“1”)解释为整数。但是,计算机上的整数类型使用4个字节,它可以表示的最大数字是2^31-1。数字11111大于2^33。所以,你得到的行为

尝试将输入解析为字符串,而不是庞大的数字

但是-下次请:

  • 使用适当的压痕
  • 使用有意义的变量名(例如,
    转换次数
    ,而不是
    t
  • 举个简单的例子。例如,我们不需要在
    t
    上有外部循环-您可以通过一次转换来演示您的问题
  • 检查库调用的结果<你知道,代码>扫描()可能会失败

  • 声明变量时,使用 int前面的“unsigned long long”。
    在使用scanf函数时,使用格式说明符“%lld”。

    如果您知道程序失败的测试用例,您应该尝试在调试器中运行它,并逐步查看代码中涉及的变量的内容。您的输入似乎超过了(典型的)最大整数值。我查看了缩进,我希望它现在是可读的。尝试将二进制数作为字符串读取并测试每个字符。正如Steve Summit已经提到的,输入值太大,无法读入32位整数。qwerty9875:它只能“完美工作”,因为您限制了测试。字符串解析是一种方法,就像@SteveSummit建议的那样。请在您的问题中添加一些代码以使其更可用