Умножение чисел длины 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; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д