Pagini recente » Cod sursa (job #454954) | Cod sursa (job #3150941) | Cod sursa (job #607008) | Cod sursa (job #1530816) | Cod sursa (job #466717)
Cod sursa(job #466717)
#include <stdio.h>
#include <string.h>
#include <cmath>
using namespace std;
#define MAX 10001
int sir[MAX];
int nr1[MAX], nr2[MAX];
int n, i, j, k;
void mulmare (int A[], int B[]) // A <- A * B
{
int i, j, t, C[MAX]; // C <- A * B
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)); // A <- C
}
void afisare(int C[])
{
FILE *g = fopen ("prod.out","w");
for (i=C[0]; i>=1; --i)
fprintf (g,"%d", C[i]);
fclose(g);
}
int main ()
{
FILE *f = fopen ("prod.in","r");
for (i=1; i<=9; ++i)
{
fscanf (f,"%d", &k);
while (k)
{
n ++;
k --;
sir[n] = i;
}
}
if (!n)
{
fprintf (g,"0");
return 0;
}
if (n % 2 == 0)
{
for (i=1; i<=n; ++i)
{
if (i % 2 == 0)
{
nr2[0] ++;
nr2[nr2[0]] = sir[i];
}
else
{
nr1[0] ++;
nr1[nr1[0]] = sir[i];
}
}
/* printf ("nr1 = ");
afisare (nr1);
printf ("\nnr2 = ");
afisare (nr2);*/
mulmare (nr1, nr2);
//printf ("\n\nProdus = ");
afisare (nr1);
}
else
{
nr2[0] = 1;
nr2[nr2[0]] = sir[1];
for (i=2; i<=n; ++i)
{
if (i % 2 != 0)
{
nr1[0] ++;
nr1[nr1[0]] = sir[i];
}
else
{
nr2[0] ++;
nr2[nr2[0]] = sir[i];
}
}
/* printf ("nr1 = ");
afisare (nr1);
printf ("\nnr2 = ");
afisare (nr2);*/
mulmare (nr1, nr2);
//printf ("\n\nProdus = ");
afisare (nr1);
}
fclose(f);
return 0;
}