algorytm.org

Implementacja w C/C++

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Silnia - Implementacja w C/C++
Ocena użytkownikóww: *****  / 7
SłabyŚwietny
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;
}
Komentarze
photo
+1 # Tomasz Lubiński 2011-07-11 08:32
W MS Visual Studio trzeba dodać jeszcze:
#include <string>
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz