Untitled

Anonymous
plain_text
02/22/2026 8:59 AM
2.2 KB
8
Indexable
#include <stdio.h>

#define n 4

void LS(int A[], int Q[])
{
    for (int i = n - 1; i > 0; i--)
        A[i] = A[i - 1];

    A[0] = Q[n - 1];

    for (int i = n - 1; i > 0; i--)
        Q[i] = Q[i - 1];

    Q[0] = 0;
}

void binaryAdd(int A[], int B[])
{
    int carry = 0;

    for (int i = 0; i < n; i++)
    {
        int sum = A[i] + B[i] + carry;
        A[i] = sum % 2;
        carry = sum / 2;
    }
}

int isnegative(int A[])
{
    return A[n - 1];
}

void loadBinary(int num, int arr[])
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = num % 10;
        num /= 10;
    }
}

void generateM1(int M[], int M1[])
{
    for (int i = 0; i < n; i++)
        M1[i] = (M[i] == 0) ? 1 : 0;

    int carry = 1;

    for (int i = 0; i < n; i++)
    {
        int sum = M1[i] + carry;
        M1[i] = sum % 2;
        carry = sum / 2;
    }
}

int main()
{
    int m, q;
    int A[n] = {0}, Q[n], M[n], M1[n];
    int N;

    printf("Enter dividend in binary: ");
    scanf("%d", &q);

    printf("Enter divisor in binary: ");
    scanf("%d", &m);

    loadBinary(q, Q);
    loadBinary(m, M);
    generateM1(M, M1);

    N = n;

    while (N > 0)
    {
        LS(A, Q);
        binaryAdd(A, M1);

        if (isnegative(A))
        {
            Q[0] = 0;
            binaryAdd(A, M);
        }
        else
        {
            Q[0] = 1;
        }

        N = N - 1;
    }

    printf("\nFinal Quotient (Q): ");
    for (int i = n - 1; i >= 0; i--)
        printf("%d", Q[i]);

    printf("\nFinal Remainder (A): ");
    for (int i = n - 1; i >= 0; i--)
        printf("%d", A[i]);

    return 0;
}
Editor is loading...
Leave a Comment