Умножение чисел длины 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;
}
}
}
}