Неправильные выходы в десятичном виде в двоичное после ввода 1024? - PullRequest
1 голос
/ 28 сентября 2019

Мой код работает нормально до 1024, но большие значения, чем 1024, дают неправильный вывод, пожалуйста, помогите:

#include<stdio.h>

int main()
{
    int dec,i=1;
    int rem=0;
    long long int result=0;

    scanf("%d",&dec);

    while(dec!=0)
    {
        rem=dec%2;
        result = result +rem*i;

        dec=dec/2;
        i=i*10;

    }
    printf("%I64u",result);

    return 0;
}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Код должен накапливать двоичное значение в строке.Поскольку это перекрестная публикация на C и C ++, я полагаю, что решение C является подходящим (в C ++ я бы использовал std::string, а бухгалтерия была бы несколько проще):

#include<stdio.h>

int main()
{
int rem=0;
char result[sizeof(long long)*CHAR_BITS+1];
int dec,i=sizeof(result);
result[--i] = '\0';

scanf("%d",&dec);
while(dec!=0)
{
    rem=dec%2;
    result[--i] = rem + '0';
    dec=dec/2;
}
printf("%s",result + i);

return 0;

}

(Внимание: не проверено)

0 голосов
/ 28 сентября 2019

Вот вам

#include <stdio.h>

int main(void) 
{
    int dec = 0;
    long long int i = 1;
    long long int result = 0;

    scanf( "%d", &dec );

    do
    {
        int rem = dec % 2;
        result = result + rem * i;

        i *= 10;

    } while ( dec /= 2 );

    printf( "%I64u", result );

    return 0;
}

Проблема в том, что переменная i объявлена ​​как имеющая тип int.Таким образом, значение результата выражения i *= 10 или выражения rem * i будет вычислено как объекты типа int, а не как объекты типа long long int.

Если ввести 1024тогда вывод будет

10000000000

В общем, ваш подход неверен, потому что размер типа long long int в любом случае ограничен и не сможет представить все возможные целочисленные значения в двоичной записи.

Вы можете использовать символьный или целочисленный массив цифр вместо объекта типа long long int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...