Cztery ostatnie cyfry silni z 1 000 000 000
Ostatnio zmodyfikowano 2017-04-08 21:19
DarthBane Temat założony przez niniejszego użytkownika |
Cztery ostatnie cyfry silni z 1 000 000 000 » 2017-04-05 22:52:26 Idąc za ciosem siedziałem nad innym programem, który oblicza silnię i podaje jej cztery ostatnie cyfry. Niestety gdzieś po drodze gubię zakres i nie pokazuje mi poprawnego wyniku. #include <iostream>
using namespace std;
int main() { int n; long long s = 1; long long a; cin >> n; if( 0 <= n <= 1000000000 ); int i; for( long long i = n; i > 1; i-- ) s *= i; a = s % 10000; cout << a; return 0; } |
|
Saran |
» 2017-04-05 22:54:52 Użyj biblioteki GMP pozwalającej na przechowywanie bardzo dużych liczb.
https://gmplib.org/ |
|
michal11 |
» 2017-04-05 22:54:54 Otwórz excela (albo weź kartkę) i oblicz silnię dla liczb od 1 do 20, obejrzyj otrzymane wyniki, wyciągnij wnioski i napisz poprawny, prosty program. |
|
DarthBane Temat założony przez niniejszego użytkownika |
» 2017-04-06 17:48:50 z pewnością da się jakoś zoptymalizować ten kod, ale udało mi się uzyskać pożądany efekt. Dzięki za podpowiedzi przydały się :) #include <iostream>
using namespace std;
int main() { int n; long long int s = 1; long long int a; cin >> n; if( n >= 15 ) { cout << "0000"; } else { for( int i = 1; i <= n; i++ ) { s =( s * i ); } a =( s % 10000 ); cout << a << endl; } return 0; } |
|
michal11 |
» 2017-04-06 18:01:24 No chyba nie bardzo, silnia dla 16 to 20922789888000 czyli 4 ostatnie cyfry tej liczby to 8000 a nie 0000. Zresztą moja podpowiedź miała cie nakierować na to aby w ogóle nie obliczać tutaj niczego tylko najzwyczajniej wpisywać odpowiedni wynik z palca. |
|
DarthBane Temat założony przez niniejszego użytkownika |
» 2017-04-06 18:49:54 @michal11 nie bardzo rozumiem co masz na myśli o wyniku z palca. a 16! to 2,09228E+13 przynajmniej wg Excella :)
|
|
jankowalski25 |
» 2017-04-06 18:54:58 co masz na myśli o wyniku z palca |
To, że wystarczy nieznacznie uprościć najbardziej prymitywne rozwiązanie. Jeśli liczba to zero, wypisz wynik dla zera, jeśli liczba to jeden, wypisz wynik dla jedynki, ... Widzisz różnicę? |
|
DarthBane Temat założony przez niniejszego użytkownika |
» 2017-04-06 20:10:52 @jankowalski25
masz na myśli dokładniejszą liczbę 16! ? widzieć różnicę widzę tylko nie wiem czym się sugerujesz |
|
« 1 » 2 |