Facebook
From matiut2, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 249
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.                 //program pozwala wyliczyć silnie z duzych liczb takich jak 100 na które unsigned long long jest za mały hehe
  5.         // a przynajmniej powinien pozwolic gdyby działał dobrze ... meh
  6. int main()
  7. {
  8.         cout << "Wpisz liczbe, na ktorej chcesz wykonac silnie [n!] (n > 0): \n";       //prośba o wprowadzenie danych
  9.         int ile;                                                        //zmienna na dane
  10.         cin >> ile;                                                     //wprowadzenie danych do zmiennej
  11.  
  12.         unsigned int rozmiar = (ile * 2);                       //ustalenie rozmiaru tablicy
  13.         short * tab = new short[rozmiar];               //nie wiem czemu ale taka deklaracja sprawia że tabica ma tyle elementów ile chcę
  14.         //(to nie błąd musimy mieć więcej miejsca)  //trzeba odjąć bo inaczej tablica bedzie miała o jeden element wincyj :kappa:
  15.         for (int a = 0; a <= (rozmiar - 1); a++) tab[a] = 0;                    //wkładam do tablicy zera żeby móc mnożyc realne wartości a nie "śmiecie"
  16.  
  17.         tab[(rozmiar - 1)] = 1;                        //ostatni element tablicy ustawiamy na 1 (mnozenie na wzór mnożenia pod kreskę)
  18.  
  19.         short nadm = 0;                                                 //zmienna na wartość pozostałą po mnożeniu a większą niż 9 ... bo mnożymy "pod kreskę"
  20.         unsigned short mnoznik = ile;                   // tworzymy zmienną mnożnik równą wprowadzonej wartości ale bedziemy go modyfikować
  21.  
  22.         bool prawda = true;                                             //zmienna potrzebna do pętli while ...
  23.         while (prawda)                                                  //owa petla while(prawda) [dopóki prawda] mnożymy potem już nie ...
  24.         {
  25.                 for (int i = ( rozmiar - 1 ); i != 0; i--)      //wykonujemy mnożenie przez mnożnik na każdym elemencie tablicy
  26.                 {
  27.                         unsigned short wynik = tab[i] * mnoznik;
  28.                         if ((wynik + nadm) <= 9)
  29.                         {
  30.                                 tab[i] = wynik + nadm;
  31.                                 nadm = 0;
  32.                                 //cout << "wynik = " << wynik << " nadmiar = " << nadm << endl; //(używałem podczas testów)
  33.                         }
  34.                         else
  35.                         {
  36.                                 tab[i] = (wynik + nadm) % 10;
  37.                                 nadm = (wynik - tab[i]) / 10;
  38.                                 //cout << "wynik = " << wynik << " nadmiar = " << nadm << endl; //up
  39.                         }
  40.  
  41.                         //for (int t = 0; t <= ( rozmiar - 1); t++) cout << tab[t]; cout << endl; //up
  42.  
  43.                 }
  44.                 mnoznik--;                                                              //skoro to silnia to za każdym razem mnożymy przez mniejszą liczbe czyli zmniejszamy mnoznik
  45.                 prawda = (mnoznik > 0);                                 //czy pętla while ma dalej pracować ? oto jest pytanie ...
  46.         }
  47.  
  48.         for (int j = 0; j <= (rozmiar - 1); j++)                        //wypisujemy wynik zawarty w tablicy
  49.         {
  50.                 cout << tab[j];
  51.         }
  52.         cin.get();
  53.         cin.get();
  54.     return 0;
  55. }
  56.