Cod sursa(job #2243812)

Utilizator eilerGabriel-Ciprian Stanciu eiler Data 21 septembrie 2018 14:16:47
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;

int fv[10], A[1000001], B[1000001], C[1000001];

void MultHuge(){
	int i, j, T=0;

  C[0]=A[0]+B[0]-1;
  for (i=1;i<=A[0]+B[0];)
		C[i++]=0;

  for (i=1;i<=A[0];i++)
    for (j=1;j<=B[0];j++)
      C[i+j-1]+=A[i]*B[j];

  for (i=1;i<=C[0];i++){
		T=(C[i]+=T)/10;
		C[i]%=10;
	}

  if (T)
		C[++C[0]]=T;
}

bool comp(){
	if (A[0]<B[0])
		return true;
	if (A[0]>B[0])
		return false;
	for (int i=1; i<=A[0]; i++)
    if (A[i]>B[i])
      return false;
    else if (A[i]<B[i])
      return true;
  return true;
}

void invers(int v[]){
	int i;
	for (i=1; i<=v[0]/2; i++)
		swap(v[i], v[v[0]-i+1]);
}

int main(){
	int i;
	bool alt;

	ifstream fin ("prod.in");
	for (i=1; i<=9; i++)
		fin >> fv[i];
	fin.close();

	A[0]=0; B[0]=0;
	i=9;
	while (i>0){
		while (fv[i]>0){
			if (comp())
				A[++A[0]]=i;
			else
				B[++B[0]]=i;
			fv[i]--;
		}
		i--;
	}
	invers(A); invers(B);
	MultHuge();

	ofstream fout ("prod.out");
	for (i=C[0]; i>0; i--)
		fout << C[i];
	fout.close();

	return 0;
}