Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. string dodaj(string a, string b)
  2. {
  3.     // wyznaczamy pozycję ostatniej cyfry w obu łańcuchach
  4.  
  5.     int pa = a.length() - 1;
  6.     int pb = b.length() - 1;
  7.  
  8.     // zerujemy łańcuch wynikowy
  9.  
  10.     string wynik = "";
  11.  
  12.     // na początku przeniesienie wynosi 0
  13.  
  14.     int p = 0;
  15.  
  16.     // w pętli dodajemy kolejne cyfry a i b
  17.  
  18.     while(pa >= 0 || pb >= 0)
  19.     {
  20.         // wyliczamy wartości cyfr w łańcuchach a i b
  21.  
  22.         int ca, cb, w;
  23.  
  24.         if(pa >= 0) ca = a[pa] - 48; else ca = 0;
  25.         if(pb >= 0) cb = b[pb] - 48; else cb = 0;
  26.  
  27.         // obliczamy sumę cyfr z a i b, uwzględniając przeniesienie
  28.  
  29.         w = ca + cb + p;
  30.  
  31.         // do łańcucha wynikowego wstawiamy ostatnią cyfrę w
  32.  
  33.         wynik = "0" + wynik;
  34.         wynik[0] = 48 + w % 10;
  35.  
  36.         // obliczamy przeniesienie do następnej kolumny
  37.  
  38.         p = w / 10;
  39.  
  40.         // modyfikujemy indeksy kolumn w łańcuchu a i b
  41.  
  42.         pa--; pb--;
  43.     }
  44.  
  45.     // jeśli przeniesienie wynosi 1, dopisujemy cyfrę 1 do wyniku
  46.  
  47.     if(p) wynik = "1" + wynik;
  48.  
  49.     return wynik;
  50. }
  51.  
  52. // Funkcja mnoży małą liczbę 32 bitową przez dużą
  53. //-----------------------------------------------
  54.  
  55. string mnoz(unsigned a, string b)
  56. {
  57.     string wynik = "0";
  58.     unsigned maska;
  59.  
  60.     for(maska = 1; maska; maska <<= 1)
  61.     {
  62.         if(a & maska) wynik = dodaj(wynik, b);
  63.         b = dodaj(b, b);
  64.     }
  65.  
  66.     return wynik;  
  67. }
  68.  
  69. int main()
  70. {
  71.     int i,n;
  72.     string silnia = "1";
  73.  
  74.     cin >> n;
  75.  
  76.     for(i = 1; i <= n; i++) silnia = mnoz(i,silnia);
  77.  
  78.     cout << n << "! = " << silnia << endl << endl;
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement