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

Przyśpieszenie programu w c++

VPS Starter Arubacloud
0 głosów
1,074 wizyt
pytanie zadane 7 marca 2017 w C i C++ przez styrczu Obywatel (1,050 p.)
edycja 7 marca 2017 przez Patrycjerz

Macie może jakiś pomysł co zmienić w moim kodzie aby wykonywał sie poniżej 1s?

#include <iostream>

using namespace std;

int main()
{
    int D;
    short int n;
    int silnia=1;
   cin>>D;
   for(int i=1;i<=D;i++)
    {
            cin>>n;
        for(int j=n;j>1;j--)
        {
            silnia*=j;
        }
        cout<<(silnia%100)/10<<" "<<silnia%10<<endl;
        silnia=1;
    }
    return 0;
}

Obecnie wykonuje się w 2,6s i zupełnie nie wiem co zmienić.

komentarz 7 marca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
sam algorytm wykonuje sie w kilka milisekund, dlugo trwa pobranie zmiennej i wypisanie odpowiedzi
komentarz 7 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
Jesli to zadanie jest ze spoja to zmien koncepcje ;)

2 odpowiedzi

0 głosów
odpowiedź 7 marca 2017 przez mokrowski Mędrzec (156,260 p.)
To jest zły algorytm. Proponuję abyś policzył i wypisał wyniki dla potęg. Widzisz jakąś regularność w ostatnich cyfrach?
komentarz 7 marca 2017 przez styrczu Obywatel (1,050 p.)
Ostatnie cyfry są zerami. Może jakaś jeszcze jedna wskazówka w ktora strone isc?
komentarz 7 marca 2017 przez mokrowski Mędrzec (156,260 p.)
komentarz 7 marca 2017 przez styrczu Obywatel (1,050 p.)
dwie cyfry silni, kategoria latwe
komentarz 7 marca 2017 przez mokrowski Mędrzec (156,260 p.)
A jeśli to to zadanie. W takim razie...

1. Zauważ że powyżej pewnej wartości n dla n!, ostatnia cyfra to 0

2. Zauważ że powyżej pewnej wartości n dla n! przed-ostatnia cyfra to 0

3. Poniżej tych wartości tablicuj wyniki.

Lepszej podpowiedzi nie dostaniesz :-)
komentarz 7 marca 2017 przez styrczu Obywatel (1,050 p.)
juz rozumiem, dzieki!
0 głosów
odpowiedź 7 marca 2017 przez MararOn Bywalec (2,620 p.)
A co w przypadku, gdy spoj(bo zakładam że o niego chodzi) będzie chciał dwie ostatnie cyfry jakiejś dużej liczby?

Wypisz sobie wyniki silni np. do 20, wtedy powineneś zobaczyć jak to rozwiązać znacznie prościej.
komentarz 7 marca 2017 przez styrczu Obywatel (1,050 p.)
Moze jakas mala wskazowka? Bo nic mi nie przychodzi do glowy.
komentarz 7 marca 2017 przez MararOn Bywalec (2,620 p.)
Serio nic? ;p

1! == 1
2! == 2
3! == 6
4! == 24
5! == 120
6! == 720
7! == 5040
8! == 40320
9! == 362880
10! == 3628800
11! == 39916800
12! == 479001600
13! == 6227020800
14! == 87178291200
15! == 1307674368000
16! == 20922789888000
17! == 355687428096000
18! == 6402373705728000
19! == 121645100408832000
20! == 2432902008176640000

Podobne pytania

0 głosów
1 odpowiedź 559 wizyt
pytanie zadane 31 grudnia 2016 w C i C++ przez czujek22 Dyskutant (7,670 p.)
0 głosów
3 odpowiedzi 234 wizyt
0 głosów
4 odpowiedzi 1,647 wizyt

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,368 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...