Cod sursa(job #1842073)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 6 ianuarie 2017 14:31:53
Problema Prod Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
void HugeMultiply(int A[],int B[]){
int i,j,t,C[1002];
memset(C,0,sizeof(C));
for(i=1;i<=A[0];i++){
for(t=0,j=1;j<=B[0]||t;j++,t/=10)C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
if(i+j-2>C[0])C[0]=i+j-2;}
memcpy(A,C,sizeof(C));}
char chA[501],chB[501];
int A[1002],B[1002],fr[9],sum,l1,l2,a,b,t,i=8,eq,d1,d2;
int main(){
FILE *f,*g;
f=fopen("prod.in","r");
g=fopen("prod.out","w");
for(i=0;i<9;i++){fscanf(f,"%d",&fr[i]);sum+=fr[i];}
while(sum>1){
while(!fr[i])i--;
d1=i+1;fr[i]--;
while(!fr[i])i--;
d2=i+1;fr[i]--;
sum-=2;
if(d1>d2){d1=d1+d2;d2=d1-d2;d1=d1-d2;}
if(!eq&&d1<d2){eq=1;chA[a++]=d1;chB[b++]=d2;}else{chA[a++]=d2;chB[b++]=d1;}}
if(sum){for(i=0;i<9&&!i;i++);chA[a++]=i;}
l1=strlen(chA);l2=strlen(chB);A[0]=l1;B[0]=l2;a=b=0;
for(i=l1-1;i>=0;i--)A[++a]=chA[i];
for(i=l2-1;i>=0;i--)B[++b]=chB[i];
HugeMultiply(A,B);
for(i=A[0];i>0;i--)fprintf(g,"%d",A[i]);
return 0;}