Pagini recente » Cod sursa (job #3254662) | Cod sursa (job #1807510) | Cod sursa (job #309273) | Cod sursa (job #913270) | Cod sursa (job #513415)
Cod sursa(job #513415)
//se da un numar intreg 0<=p<=100 milioane
//se cere cel mai mic numar intreg ptr care factorialul are fix p zerouri in coada
#include<fstream>
using namespace std;
int p;
//calculez cati de 5 sunt in c! si retin in p
int nrz( int c )
{
int p = 0;
while( c )
{
p += c/5;
c /= 5;
}
return p;
}
int main()
{
ifstream f("fact.in");
ofstream g("fact.out");
f>>p;
if(p==0)
{
g<<1;
return 0;
}
//cautare binara
// a=0 si b=100 milioane. daca nrzerodinfact((a+b)/2)<p tre sa caut in dreapta, altfel caut in stanga
//repet pana nrdezerodinfact=p sau a il depaseste pe b(in acest caz afisez -1)
int a=0,b=500000000,c,rez,gasit=0;
do
{
c=(a+b)/2;
rez=nrz(c);
if(rez<p)
a=c+1;
else
if(rez>p)
b=c-1;
else
{
//nu stim daca nr gasit este cel mai mic, dar el oricum face parte dintr o multime cu maxim 5 elemente
//nr corect este si multiplu de 5
//impart nr la 5 si scad restul din el.Ex 13%5=3 deci nr minim va fi 13-3=10
c=c-c%5;
g<<c;
gasit=1;
}
}
while(a<=b && gasit==0);
if(gasit==0)
g<<-1;
return 0;
}