Как взять два двоичных числа и операцию у пользователя и дать ответ - PullRequest
0 голосов
/ 21 декабря 2018

Я выполняю задание по программированию на c, которое работает (+, -, *, /) с двумя двоичными числами, например, если пользователь вводит: «1001 + 1010» должен добавить два двоичных файла и дать вывод «010011»

мой код может принимать только каждый шаг ввода шаг за шагом (берет первый двоичный файл, затем второй двоичный файл и выбирает операцию (+, -, *, /), а затем генерирует ответ) и генерирует ответ, но назначение требует принятьцелое сразу (1001 + 1010 и ответь 010011)

#include <stdio.h>

int main()

{

    int num, num2, binary_val, binary_val2, decimal_val = 0, decimal_val2 = 0, base = 1, rem, base2 = 1, rem2, sum;
    char oprtr;

    printf("Enter the first binary number(1s and 0s) \n");

    scanf("%d", &num);

    binary_val = num;
    printf("Enter the second binary number(1s and 0s) \n");

    scanf("%d", &num2);
    binary_val2 = num2;

    printf("choose operation +,-,/,* \n");

    scanf("%char", &oprtr);

    while (num > 0)

    {

        rem = num % 10;

        decimal_val = decimal_val + rem * base;

        num = num / 10;

        base = base * 2;
    }
    while (num2 > 0)

    {

        rem2 = num2 % 10;

        decimal_val2 = decimal_val2 + rem2 * base2;

        num2 = num2 / 10;

        base2 = base2 * 2;
    }

    if (oprtr == '+')
    {
        sum = decimal_val + decimal_val2;
    }
    else if (oprtr == '*' || oprtr == 'x' || oprtr == 'X')
    {
        sum = decimal_val * decimal_val2;
    }
    else if (oprtr == '-')
    {
        sum = decimal_val * decimal_val2;
    }
    else if (oprtr == '/')
    {
        sum = decimal_val / (float)decimal_val2;
    }
    else
    {
        printf("error");
    }

    int decimal_num, remainder, binary = 0;

    while (sum > 0)

    {

        remainder = num % 2;

        /*  To count no.of 1s */

        if (remainder == 1)

            binary = binary + remainder * base;

        sum = sum / 2;

        base = base * 10;
    }

    printf("The Binary number of the first one is = %d \n", binary_val);
    printf("The Binary number of the second one is  = %d \n", binary_val2);

    printf("Its decimal equivalent is = %d \n", decimal_val);
    printf("Its decimal equivalent is = %d \n", decimal_val2);

    printf("And their Value is = %d \n", sum);
}

1 Ответ

0 голосов
/ 21 декабря 2018

Прежде чем читать оператор, вы должны пропустить \ n, введенный после второго числа, поэтому, например, getchar(); oprtr = getchar(); вместо вашего scanf

вы всегда будете печатать значение 0, потому что вы печатаете суммувместо двоичного

вы пропустили сброс базы до 1 до последнего, в то время как

дополнительные примечания

  • для преобразования двух чисел из двоичного в десятичное, которое вы написали два разатот же код, лучше добавить выделенную функцию
  • , проще попросить ввести num1 {opr} num2 в одну строку, потому что после того, как вам просто нужно сделать один уникальный scanf: scanf("%d%c%d", &num, &oprtr, &num2);
...