Регистрирайте се
Програма намираща сумата на факториелите на цифрите на число
|
| Предишната тема :: Следващата тема |
| Автор |
Съобщение |
rytimid Редовен
Регистриран на: 14 Oct 2007 Мнения: 110
  гласове: 4
|
Пуснато на: Thu Nov 08, 2007 12:08 am Заглавие: Програма намираща сумата на факториелите на цифрите на число |
|
|
Та задачата изисква програма която да намери висчки числа, равни на сумата на факториелите на своите цифри. Има и упътване, че би било добре да се намери горна граница до която да се търсят такива числа, и за пример се дава 9*9!=3265920, което очевидно е по-малко от произволно 9 цифрено число.
След кратък размисъл върху упътването, достигнах до извода, че числата са само 1!=1 и 2!=2, което пък ме доведе на мисълта, че нещо не съм видял нещата като трябва и така се стигна да питам тук.  |
|
| Върнете се в началото |
|
 |
Реклама
|
Пуснато на: Заглавие: Реклама |
|
|
|
|
|
| Върнете се в началото |
|
 |
v1rusman Напреднал

Регистриран на: 18 Jul 2007 Мнения: 318
     гласове: 10
|
Пуснато на: Thu Nov 08, 2007 2:08 pm Заглавие: |
|
|
Задачата от олимпиадата по информатика за 10 клас ли е ?Или е от "Димо Малешков" ?
Един приятел ми я беше казал преди година,като от казаното си спомням само,че 1! и 2! отговарят на условието(не знам дали наистина е така,защото беше отдавна). |
|
| Върнете се в началото |
|
 |
Irrefutable Напреднал

Регистриран на: 15 Jul 2007 Мнения: 298 Местожителство: София
    гласове: 5
|
Пуснато на: Thu Nov 08, 2007 2:10 pm Заглавие: |
|
|
1 2 145 40585
Ограничението е грубо до 3628800, защото при над 10 цифрено число сумата от факториела на цифрите винаги ще е по-малак от числото.
| Код: |
#include <iostream>
using namespace std;
int facts[10];
int make_facts(){
facts[0] = 1;
for(int i = 1 ; i < 10 ; i++)
facts[i] = facts[i-1]*i;
};
int main(){
make_facts();
for(int num = 1 ; num < 3628800 ; num++)
{
int sum = 0;
int tmp = num;
while(tmp>0)
{
sum+=facts[tmp%10];
tmp/=10;
};
if ( num == sum )
cout<<num<<" ";
}
cin.get();
return 0;
};
|
|
|
| Върнете се в началото |
|
 |
rytimid Редовен
Регистриран на: 14 Oct 2007 Мнения: 110
  гласове: 4
|
Пуснато на: Fri Nov 09, 2007 11:23 pm Заглавие: |
|
|
Irrefutable и аз се сетих за това решение. Пробема ми е в това, че не схващам как се ограничава интервала от числа. Бих се радвал ако ми го обясниш с няколко приемра.
v1rusman задачата е от книгата на Преслав Наков и Панайот Добриков Програмиране=++Алгоритми |
|
| Върнете се в началото |
|
 |
Irrefutable Напреднал

Регистриран на: 15 Jul 2007 Мнения: 298 Местожителство: София
    гласове: 5
|
Пуснато на: Sat Nov 10, 2007 10:23 am Заглавие: |
|
|
9 е най-голямата цифра , и нейния факториел е 362880.
когато имаш едноцифрено число , числото може да е максимум 9 , а фактуриела му 362880 . Тоест сумата от фактуриела на цифрите му (едната му цифра) може да е по-голяма от самото число.
когато когато имаш 2 цифри , числото ти е максимум 99 , а сумата на фактуриелите е максимум 2 * 362880.
За три цифри е 999 и 3*362880 , за 4 е 9999 и 4*362880.
За 7 цифри става 9999999 и 7*362880 , което е 9999999 и 2540160, Все още обаче 2540160 > 1111111 , на следващата стъпка , когато станат 8 цифрите фактуриела става максимум 2903040 , а числото е най-малко 11111111, което значи че най-малкото число с 8 цифри е по-малко от най-голямата сума от факториелите на цифрите му.
При това числото определено нараства по-бързо от сумата от фактуриелите на цифрите му. Следователно с повече от 7 цифри няма защо да се занимаваш
Принципно аз го закраглих на 10, защото ме мързеше да мисля изобщо. Човек си дава сметка кое е по-продуктивно за да намери някакви константи които ще се търсят само веднъж. Да напише кода за 1 минута който се изпълнява за 0.5 секунди или да мисли по задачата 2 минути и да напише за още 1 код който се изпълнява 0.1 секунди  |
|
| Върнете се в началото |
|
 |
rytimid Редовен
Регистриран на: 14 Oct 2007 Мнения: 110
  гласове: 4
|
Пуснато на: Sat Nov 10, 2007 9:30 pm Заглавие: |
|
|
мда, вече се ориентирах благодаря за обясниението |
|
| Върнете се в началото |
|
 |
|
|
Не Можете да пускате нови теми Не Можете да отговаряте на темите Не Можете да променяте съобщенията си Не Можете да изтривате съобщенията си Не Можете да гласувате в анкети Може да прикачвате файлове Може да сваляте файлове от този форум
|
|