Nadesłany przez Bartosz Bednarczyk, 01 lipca 2011 21:02
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.
fib_3_c.cpp:
#include <iostream> /* * Bartosz "WiedźMAC" Bednarczyk * Liceum Ogólnokształcące im. Władysława Broniewskiego w Strzelcach Opolskich * Obliczanie interacyjnie elementu ciągu fibonacciego 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; } int main() { std::ios_base::sync_with_stdio(false); // Przyśpieszenie I/O std::string Fib0 = "0", Fib1 = "1", FibN; // Elementy ciągu Fibonacciego unsigned long long int N, i; std::cout << "Ktory element ciagu obliczyc?\n"; std::cin >> N; if( N < 2 ) { if( N == 0 ) FibN = Fib0; else FibN = Fib1; } else { for( i = 2; i <= N; i++ ) // Obliczanie elementu ciągu fibonacciego { FibN = Dodawanie( Fib0, Fib1 ); Fib0 = Fib1; Fib1 = FibN; } } std::cout << "Fib(" << N << ") = " << FibN << "\n"; // Wypisywanie wyniku return 0; }
#include <string>