• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

silnia zadanie z SPOJ-U jak mogę zmniejszyć czas

Cloud VPS
0 głosów
314 wizyt
pytanie zadane 8 czerwca 2016 w C i C++ przez ernest52 Początkujący (450 p.)
Jakby ktoś był ciekawy treści zadania tu stawiam linka:

http://pl.spoj.com/problems/FCTRL3/

a to mój kod do tego zadania:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    cout<<setprecision(1000);
    cout<<"podaj ile liczb podniesiesz do silni?"<<endl;
long long int d,a,dziesiatki=0,jednostki=0,b;
b=1;
    cin>>d;
    

    for(int i=0;i<d;i++)
    {
        cout<<"podaj liczbe do silni\n";
        cin>>a;
        if(a<=1)
        {
            cout<<"silnia wynosi:"<<1<<endl;
            cout<<0<<" "<<1<<endl;
            
            
        }

    else
    {
        
        for(int i=1;i<=a;i++)
        {
            b*=i;
            
        
        }
        cout<<"silnia wynosi: "<<b<<endl;
        for(int i=1;i<=b;i++)
        {
            if(i%10==0)
            {
                dziesiatki+=1;
            }
        jednostki=b-(dziesiatki*10);
            
        }
        cout<<dziesiatki<<" "<<jednostki<<endl;
        dziesiatki=0;
        jednostki=0;
        *b=1;
        
    }
        
     }
   return 0;
 

}

 

po wysłaniu tego kodu do sędziego , wyświetla się komunikat iż "przekroczono limit czasu" . Co to znaczy? I jak mogę zmniejszyć ten czas? Jak myślicie kod jest dobry?

 Z góry dziękuję za pomoc.

1 odpowiedź

+2 głosów
odpowiedź 8 czerwca 2016 przez niezalogowany
W tym zadaniu nie chodzi o liczenie silni. Otwórz np. Excela i oblicz silnie od 1 do 15 i zwróć uwagę na 2 ostatnie cyfry.
komentarz 8 czerwca 2016 przez ernest52 Początkujący (450 p.)
ok wynik w Excelu to 1.30767E+12 na kalkulatorze 1307674368000 ok to znaczy  , że program powinien brać pod uwagę tylko dwie ostatnie cyfry z całej silni i je wypisać? No ok , ale żeby to zrobić program musi znać silnie, czyli tak czy siak musi ją policzyć. No chyba , że nie musi , bo jest jakaś funkcja czy coś? Jest?  Tylko w sumie jestem początkujący więc chciałem wszystko zrobić sam a nie korzystać z jakiś dodatkowych bibliotek czy funkcji, ale pewnie nie da rady.
komentarz 8 czerwca 2016 przez niezalogowany
Zauważ jakie są dwie ostatnie cyfy silni >= 10. Podpowiem, że do tego zadania nie trzeba nic liczyć. Wystarczy switch(...) case.
komentarz 8 czerwca 2016 przez ernest52 Początkujący (450 p.)
Już wiem o co chodzi faktycznie nic nie trzeba liczyć. Wypisałem sobie do 18! i już wiem jak to ma być, banał.. choć nie wpadłbym gdyby nie Twoja pomoc , kartka i długopis.

Podobne pytania

0 głosów
2 odpowiedzi 1,532 wizyt
pytanie zadane 31 maja 2016 w C i C++ przez Hohlik741 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,260 wizyt
pytanie zadane 19 października 2016 w C i C++ przez Paq_93 Początkujący (260 p.)
0 głosów
1 odpowiedź 3,396 wizyt

93,468 zapytań

142,404 odpowiedzi

322,706 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...