Advertisement
Josif_tepe

Untitled

Nov 9th, 2021
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4.  
  5. using namespace std;
  6. string add_big_integer(string A, string B) { // funkcija koja ke ni sobere A + B
  7.     if(A.size() < B.size()) {
  8.         swap(A, B);
  9.     }
  10.     int a_i = (int) A.size() - 1;
  11.     int b_i = (int) B.size() - 1;
  12.     int carry = 0;
  13.     string sum = "";
  14.     while(a_i >= 0 and b_i >= 0) {
  15.         int digit_a = (A[a_i] - '0');
  16.         int digit_b = (B[b_i] - '0');
  17.         int zbir = digit_a + digit_b + carry;
  18.        
  19.         if(zbir <= 9) {
  20.             sum += (zbir + '0');
  21.             carry = 0;
  22.         }
  23.         else {
  24.             carry = 1;
  25.             zbir -= 10;
  26.             sum += (zbir + '0');
  27.         }
  28.         a_i--;
  29.         b_i--;
  30.     }
  31.     while(a_i >= 0) {
  32.         int digit_a = (A[a_i] - '0');
  33.         int zbir = digit_a + carry;
  34.         if(zbir <= 9) {
  35.             sum += (zbir + '0');
  36.             carry = 0;
  37.         }
  38.         else {
  39.             carry = 1;
  40.             zbir -= 10;
  41.             sum += (zbir + '0');
  42.         }
  43.         a_i--;
  44.     }
  45.     if(carry == 1) {
  46.         sum += "1";
  47.     }
  48.     reverse(sum.begin(), sum.end());
  49.     return sum;
  50. }
  51. string multiply_big_integer(string A, string B) {
  52.     int sz_a = (int) A.size();
  53.     int sz_b = (int) B.size();
  54.     vector<int> v(sz_a + sz_b, 0);
  55.     for(int i = sz_a - 1; i >= 0; i--) {
  56.         for(int j = sz_b - 1; j >= 0; j--) {
  57.             v[i + j + 1] += (A[i] - '0') * (B[j] - '0');
  58.         }
  59.     }
  60.     for(int i = sz_a + sz_b - 1; i >= 0; i--) {
  61.         if(v[i] > 9) {
  62.             v[i - 1] += (v[i] / 10);
  63.             v[i] %= 10;
  64.         }
  65.     }
  66.     int i = 0;
  67.     while(v[i] == 0) {
  68.         i++;
  69.     }
  70.     string product = "";
  71.     for(int j = i; j < sz_a + sz_b; j++) {
  72.         product += (v[j] + '0');
  73.     }
  74.     return product;
  75. }
  76. string divide_by_2(string s, int &rem) {
  77.     int i = 0;
  78.     int n = s.size();
  79.     string result = "";
  80.     int sum = 0;
  81.     int tmp = (s[i] - '0');
  82.    
  83.     while(i < n) {
  84.         if(tmp < 2) {
  85.             tmp *= 10;
  86.             tmp += (s[i + 1] - '0');
  87.             i++;
  88.         }
  89.        
  90.         result += (tmp / 2) + '0';
  91.         int p = tmp / 2;
  92.         rem = (tmp % 2);
  93.         sum += (tmp - 2 * p);
  94.         if(i + 1 < n)
  95.         sum = sum * 10 + (s[i + 1] - '0');
  96.         tmp = sum;
  97.         i++;
  98.        
  99.     }
  100.     if(add_big_integer(result, result) != s) rem = 1;
  101.     return result;
  102. }
  103. int main() {
  104.     string s;
  105.     cin >> s;
  106.    
  107.     string decimal_number = "";
  108.     string power_of_8 = "1";
  109.     for(int i = (int) s.size() - 1; i >= 0; i--) {
  110.         string a = "";
  111.         a += s[i];
  112.         decimal_number = add_big_integer(decimal_number, multiply_big_integer(a, power_of_8));
  113.         power_of_8 = multiply_big_integer(power_of_8, "8");
  114.     }
  115.     cout << decimal_number << endl;
  116.     string binary_number = "0";
  117.     string power_of_10 = "1";
  118.     while(isdigit(decimal_number[0])) {
  119.         int rem = 1;
  120.      string divided = divide_by_2(decimal_number, rem);
  121.         string remainder = "0";
  122.         if(rem == 1) {
  123.             remainder = "1";
  124.         }
  125.         binary_number = add_big_integer(binary_number, multiply_big_integer(remainder, power_of_10));
  126.         power_of_10 = multiply_big_integer(power_of_10, "10");
  127.         decimal_number = divided;
  128.     }
  129.         cout << binary_number << endl;
  130.     return 0;
  131. }
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement