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>