Факториал "наоборот"
От: McQueen Россия  
Дата: 12.08.03 15:56
Оценка: 1 (1)
Здравствуйте!

Тут у меня такой вопрос (просто и мило : решить уравнение 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++ я пока плохо разбираюсь )

Заранее благодарен!
-Машину зря гоняет казенную! — наябидничал и Кот, жуя гриб.
Re: Факториал "наоборот"
От: LaptevVV Россия  
Дата: 12.08.03 16:22
Оценка:
Здравствуйте, 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;
}
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Факториал "наоборот"
От: McQueen Россия  
Дата: 12.08.03 16:48
Оценка:
Здравствуйте, 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;
}
-Машину зря гоняет казенную! — наябидничал и Кот, жуя гриб.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.