Здравствуйте!
Тут у меня такой вопрос (просто и мило

: решить уравнение N!=F относительно N(F известно).
Я решил это таким образом:
int anti(double F)
{
double N; int i=1;
if(F==1) N=1; else
for(N=0;F>1;i++)
if(floor(F/=i)!=F) return 0; else N++;
return N;
}
Но может кто-то напишет что-нибудь более элегантное?

(Только, большая просьба, если не трудно, пишите свои решения на C, а то в C++ я пока плохо разбираюсь

)
Заранее благодарен!
Здравствуйте, McQueen, Вы писали:
MQ>Здравствуйте!
MQ>Тут у меня такой вопрос (просто и мило
: решить уравнение N!=F относительно N(F известно).
MQ>Я решил это таким образом:
MQ>int anti(double F)
MQ>{
MQ> double N; int i=1;
MQ> if(F==1) N=1; else
MQ> for(N=0;F>1;i++)
MQ> if(floor(F/=i)!=F) return 0; else N++;
MQ> return N;
MQ>}
MQ>Но может кто-то напишет что-нибудь более элегантное?
(Только, большая просьба, если не трудно, пишите свои решения на C, а то в C++ я пока плохо разбираюсь
)
Если точно известно, что N! = F, то просто счистаем факториал заново.
unsigned int anti(double F)
{
double N=1;
for(unsigned int i = 2; N < F; i++) N*=i;
return i;
}
Здравствуйте, LaptevVV, Вы писали:
LVV>Если точно известно, что N! = F, то просто счистаем факториал заново.
LVV>LVV>unsigned int anti(double F)
LVV>{
LVV> double N=1;
LVV> for(unsigned int i = 2; N < F; i++) N*=i;
LVV> return i;
LVV>}
LVV>
И верно: просто, как и все гениальное! Спасибо!
Добавлю, пожалуй, только проверку на то, является ли F вообще факториалом какого-нибудь числа:
unsigned int anti(double F)
{
double N=1;
for(unsigned int i = 2; N < F; i++){
N*=i;
if(floor(F/N)!=F/N) return 0;
}
return i;
}