[c++] wywłaszczenie programu z silnią i źle wczytane dane
Ostatnio zmodyfikowano 2016-01-07 18:47
Eryk17 Temat założony przez niniejszego użytkownika |
[c++] wywłaszczenie programu z silnią i źle wczytane dane » 2016-01-06 20:59:01 hej. mam program na maina ktory ma obliczyć silnie danej liczby, następnie podzielić ją sposobem modulo przez 1mld i ma wypisać resztę. U mnie kompiluje i działa poprawnie, ale na stronie maina zdarzyło się że wywłaszczyło mi program oraz wczytuje złe dane. Czym to może być spowodowane? #include <iostream>
using namespace std;
int main() { unsigned int s; unsigned int silnia = 1; cin >> s; for( int i = 1; i <= s; i++ ) { silnia *= i; }; int wynik = silnia % 1000000000; cout << wynik; }
|
|
carlosmay |
» 2016-01-06 21:12:38 Dla s > 13 kończy się zakres zmiennej typu unsigned int . |
|
Eryk17 Temat założony przez niniejszego użytkownika |
» 2016-01-07 16:45:15 zmieniłem z unsigned int na samo int i nadal ten sam problem. Albo wywłaszczenie albo wiersz 1: wczytano '932053504', a oczekiwano '227020800' ktoś wie dlaczego? |
|
carlosmay |
» 2016-01-07 17:05:58 Albo wywłaszczenie albo wiersz 1: wczytano '932053504', a oczekiwano '227020800' ktoś wie dlaczego? |
Poprzedni post => niewłaściwy typ zmiennej. Wyjście poza jej zakres ( wartość maksymalną). |
|
mateczek |
» 2016-01-07 17:28:04 źle liczysz silnie !!! Gdyby Autor zadania chciał żebyś policzył silnie to pewnie nie prosił by o wynik modulo !!!! (modulo to klucz do zagadki !!!) Dane są tak dobrane że nie policzysz silni za żadne skarby prawdopodobnie nawet long long się wykrzaczy!!!
|
|
Eryk17 Temat założony przez niniejszego użytkownika |
» 2016-01-07 17:36:27 w takim razie co zrobić by ten program działał? bo probowałem long int i nadal nic. |
|
mateczek |
» 2016-01-07 18:47:18 Moja podpowiedź do zagadki !!! podaj wynik modulo - 10: 5! 6! 7! 8! 9! 452435! :P musisz liczyć ?? :P czy już znasz ?? //edit: długo schodzi więc zasugeruje rozwiązanie !!! #include <iostream>
using namespace std;
int main() { long long s; long long silnia = 1; cin >> s; for( int i = 1; i <= s; i++ ) { silnia *= i; silnia = silnia % 1000000000 if( silnia == 0 ) break; }; cout << silnia << endl; } |
|
« 1 » |