Код C двоичного в десятичное преобразование - проблема в удовлетворении конкретных тестовых случаев - PullRequest
0 голосов
/ 25 апреля 2019

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;
}

1-е тестовые случаи удовлетворяются следующим образом:
Для ввода:
2 * * +1010 10001000
101100
Ваш вывод:
136
44
Следующий тестовый пример не выполняется, и ошибка выглядит следующим образом:
Ошибка в выводе:
Неправильный ответ. !!! Неправильный ответ
Возможно, ваш код не работает правильно для нескольких тестовых случаев.
Первый тестовый случай, когда ваш код не удался:

Введите:
11111111111

Правильный вывод:
2047

А вывод вашего кода:
-3809
Может ли кто-нибудь предложить мне необходимые изменения?

1 Ответ

3 голосов
/ 25 апреля 2019

Среди некоторых других проблем с вашим кодом - вы пытаетесь интерпретировать строку «11111111111» (11 раз «1») как целое число.Тем не менее, целочисленный тип на вашем компьютере использует 4 байта, и наибольшее число, которое он может представить, составляет 2 ^ 31 - 1. Число 11 111 111 111 111 больше, чем 2 ^ 33.Итак, вы получаете целочисленное переполнение со знаком .

Попробуйте проанализировать ваш ввод как строку, а не как огромное число ...

Но - в следующий раз, пожалуйста:

  1. Используйте правильный отступ.
  2. Используйте значимые имена переменных (например, number_of_conversions, а не t).
  3. Используйте минимальный пример.Например, нам не нужно было иметь внешний цикл над t - вы могли бы продемонстрировать свою проблему с помощью одного преобразования.
  4. Проверьте результаты ваших вызовов в библиотеке!scanf() может потерпеть неудачу, вы знаете.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...