Pagini recente » Cod sursa (job #101549) | Cod sursa (job #595279) | Cod sursa (job #752269) | Cod sursa (job #2343171) | Cod sursa (job #2243812)
#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;
}