Умножение чисел длины N - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Такая вот задачка:
Число элементов массива N находится первым в файле input.txt. Далее расположены два массива целых чисел длины N. Массивы представляют собой десятичную запись чисел длины N (элемент массива – числа от 0 до 9). Реализовать функцию умножения чисел длины N. Ответ длины 2*N вывести в файл output.txt В случае некорректных данных, требуется завершить программу с кодом -1.
Не могу написать . До этого сделал задачу такую же на умножение, думал через него как нибудь возможно, текст прикрепляю, чтобы заодно понятно было какой примерно уровень нужен. Буду безумно рад помощи!
#include <stdio.h>
#include <stdlib.h>

void plus (int*,int*,int*,int);
int main(void)
{   FILE *in, *out;
    int* B; int*A; int*C;
    int q,N,i;
    in = fopen("input.txt","r");
    out = fopen("output.txt","w");
    q=fscanf(in,"%d",&N);
    if (q !=1 ||N<0) return -1;
    A = (int*) malloc(N*sizeof(int));
    B = (int*) malloc(N*sizeof(int));
    C = (int*) malloc((N+1)*sizeof(int));
    for( i=0; i<N; i++)
    {
        q=fscanf(in, "%d", &A[i]);
        if (q!=1) return -1;
        if (A[i]>9 || A[i]<0) return -1;
    }
    for( i=0; i<N; i++)
    {
        q=fscanf(in, "%d", &B[i]);
        if (q!=1) return -1;
        if (B[i]>9 || B[i]<0) return -1;
    }
 
    plus(A,B,C,N);
    for( i=0; i<N+1; i++) fprintf(out, "%d ", C[i]);
    fclose(in);
    fclose(out);
    return 0;
}

void plus(int A[],int B[], int C[],int N )
{
int i,k;
 
for (i=0;i<N+1;i++) C[i]=0;
for (i=N-1; i>=0;i-- )
{
    C[i+1]=A[i]+B[i]+C[i+1];
    if (C[i+1]>=10) {C[i+1]=C[i+1]%10,C[i]+=1; }
}

}

Решение задачи: «Умножение чисел длины N»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
 
void plus (int*,int*,int*,int);
int main(void)
{   FILE *in, *out;
    int* B; int*A; int*C;
    int q,N,i;
    in = fopen("input.txt","r");
    out = fopen("output.txt","w");
    q=fscanf(in,"%d",&N);
    if (q !=1 ||N<0) return -1;
    A = (int*) malloc(N*sizeof(int));
    B = (int*) malloc(N*sizeof(int));
    C = (int*) malloc((N * 2)*sizeof(int));
    for( i=0; i<N; i++){
        q=fscanf(in, "%d", &A[i]);
        if (q!=1) return -1;
        if (A[i]>9 || A[i]<0) return -1;
    }
    for( i=0; i<N; i++){
        q=fscanf(in, "%d", &B[i]);
        if (q!=1) return -1;
        if (B[i]>9 || B[i]<0) return -1;
    }
    plus(A,B,C,N);
    for(i = 0; i < N * 2; i++)
        fprintf(out, "%d", C[i]);
    fclose(in);
    fclose(out);
    free(A);
    free(B);
    free(C);
    return 0;
}
void plus(int A[],int B[], int C[],int N )
{
    int i, j, q, m, k = N * 2;
    for (i = 0;i < k; i++)
        C[i] = 0;
    for (i = N - 1, m = 0; i >= 0; i--, m++){
        for(j = N - 1, q = 0; j >= 0; j--, q++){
            C[k - 1 - q - m] = A[j] * B[i] + C[k - 1 - q - m];
            if (C[k - 1 - q - m] >= 10) {
                C[k - 2 - q - m] = C[k - 1 - q - m] / 10 + C[k - 2 - q - m];
                C[k - 1 - q - m] %= 10;
            }
        }
    }
}

ИИ поможет Вам:


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

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы