Nadesłany przez Bartosz Bednarczyk, 10 lipca 2011 11:44
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
s_5_c.cpp:
#include <iostream> /* * Bartosz "WiedźMAC" Bednarczyk * Liceum Ogólnokształcące im. Władysława Broniewskiego w Strzelcach Opolskich * Obliczanie interacyjnie silnii dla dużych liczb * www.algorytm.org */ inline int Cyfra( char znak ) { return int(znak-48); } // Funckcja zamieniająca znak na cyfrę inline char Znak( int Liczba ) { return char(Liczba+48); } // Funkcja zamieniająca cyfrę na znak std::string Dodawanie( std::string &A, std::string &B ) { while( A.length() != B.length() ) // Porównywanie długości stringów { if( A.length() > B.length() ) // Jeżeli któryś z nich jest mniejszy to dodajemy zera { B = "0" + B; } else A = "0" + A; } std::string Wynik = ""; // Wynik dodawania int Pomocnicza = 0; // Zmienna pomocnicza for(int i = A.length()-1; i >= 0; i-- ) // Właściwa procedura dodawania { int Pom = Cyfra(A[i]) + Cyfra(B[i]) + Pomocnicza; // Obliczamy sumę kolejnych cyfr ciągu Wynik = Znak( Pom % 10 ) + Wynik; // Zapisujemy ją do zmiennej Wynik Pomocnicza = int(Pom/10); } if( Pomocnicza != 0 ) Wynik = Znak( Pomocnicza ) + Wynik; // Jeżeli coś zostało, to dodajemy na początek return Wynik; } std::string Mnozenie( std::string STR, unsigned long long int INT) { std::string Wynik = "0"; unsigned long long i ; for(i = 1; i; i <<= 1) { if(INT & i) Wynik = Dodawanie(Wynik, STR); STR = Dodawanie(STR, STR); } return Wynik; } int main() { std::ios_base::sync_with_stdio(false); // Przyśpieszenie I/O std::string Silnia = "1"; unsigned long long int N, i; std::cout << "Z jakiej liczby obliczyc silnie?\n"; std::cin >> N; if( N == 0 || N == 1 ) std::cout << "1\n"; else { for( i = 2; i <= N; i++ ) // Obliczanie silni { Silnia = Mnozenie( Silnia, i ); } } std::cout << N <<"! = " << Silnia; // Wypisywanie wyniku return 0; }
#include <string>