Cod sursa(job #1842053)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 6 ianuarie 2017 14:22:08
Problema Prod Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.54 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];
int frecv[9], sum, len1, len2;
int a, b, t, i = 8, eq, d1, d2;
//--------------------------------------------
int main(){

FILE *file1, *file2;

file1 = fopen("prod.in", "r");
file2 = fopen("prod.out", "w");

for(i=0; i<9; i++){
    fscanf(file1, "%d", &frecv[i]);
    sum += frecv[i];
}
while(sum>1){
    while(!frecv[i]){
        i--;
    }
    d1 = i + 1;
    frecv[i]--;

    while(!frecv[i]){
        i--;
    }
    d2 = i + 1;
    frecv[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==1){
    for(i=0; i<9 && !i; i++);
    chA[a++] = i;
}
len1 = strlen(chA);
len2 = strlen(chB);
A[0] = len1;
B[0] = len2;
a = b = 0;

for(i=len1-1; i>=0; i--){
    A[++a] = chA[i];
}
for(i=len2-1; i>=0; i--){
    B[++b] = chB[i];
}
HugeMultiply(A, B);

for(i=A[0]; i>0; i--){
    fprintf(file2, "%d", A[i]);
}
return 0;
}