Pagini recente » Cod sursa (job #2927442) | Cod sursa (job #749074) | Cod sursa (job #2233102) | Cod sursa (job #2806858) | Cod sursa (job #1842053)
#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;
}