Pagini recente » Cod sursa (job #1931408) | Cod sursa (job #2878490) | Cod sursa (job #624022) | Cod sursa (job #1105605) | Cod sursa (job #1436343)
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
#pragma warning(push)
#pragma warning(disable: 4996)
int primulNr[1100];
int alDoileaNr[1100];
int rezultat[2200];
int nrCartonase[10];
int indexA, indexB;
/* Afla care dintre cele 2 nr este mai mare
* -1, primul mai mic ca al doilea
* 0, cele doua nr sunt egale
* 1, al doilea nr sunt egale
*/
int comparaNumere(int primulNr[1100], int alDoileaNr[1100])
{
// primul nr are mai putine cifre
if (primulNr[0] < alDoileaNr[0])
return -1;
else if (primulNr[0] > alDoileaNr[0])
return 1;
else
{
for (int i = 1; i <= primulNr[0]; ++i)
{
if (primulNr[i] < alDoileaNr[i])
return -1;
else if (primulNr[0] > alDoileaNr[0])
return 1;
}
}
return 0;
}
void calculeazaProdus(int primulNr[1100], int alDoileaNr[1100])
{
int transport = 0;
rezultat[0] = primulNr[0] + alDoileaNr[0] - 1;
for (int i = 1; i <= primulNr[0]; ++i)
{
for (int j = 1; j <= alDoileaNr[0]; ++j)
{
rezultat[i + j - 1] += primulNr[i] * alDoileaNr[j];
}
}
for (int i = 1; i <= rezultat[0]; ++i)
{
rezultat[i] += transport;
transport = rezultat[i] / 10;
rezultat[i] %= 10;
}
if (transport)
{
rezultat[0]++;
rezultat[rezultat[0]] = transport;
}
}
int main()
{
freopen("prod.in", "r", stdin);
freopen("prod.out", "w", stdout);
for (int i = 1; i <= 9; ++i)
{
scanf("%d", &nrCartonase[i]);
}
indexA = 1;
indexB = 1;
for (int i = 9; i >= 1; --i)
{
while (nrCartonase[i] > 0)
{
// adaugam o cifra la primul nr
if (comparaNumere(primulNr, alDoileaNr) < 0)
{
primulNr[0] = indexA;
primulNr[indexA] = i;
indexA++;
}
else
{
alDoileaNr[0] = indexB;
alDoileaNr[indexB] = i;
indexB++;
}
nrCartonase[i]--;
}
}
// inversam numerele incepand cu pozitia 1 pentru a fi mai usor sa facem produsul celor 2 nr
reverse(primulNr + 1, primulNr + 1 + primulNr[0]);
reverse(alDoileaNr + 1, alDoileaNr + 1 + alDoileaNr[0]);
// facem produsul celor 2 nr
calculeazaProdus(primulNr, alDoileaNr);
for (int i = rezultat[0]; i > 0; --i)
{
printf("%d", rezultat[i]);
}
return 0;
}
#pragma warning(pop)