Advertisement
Guest User

Calculate 2^x

a guest
Nov 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include<iostream>
  2. #include <vector>
  3.  
  4.  
  5. void TwoPowerNoJutsu(std::vector<short> &source, short expo) {
  6.     if (expo <= 3) {
  7.         switch (expo) {
  8.         case 0:
  9.             source.emplace_back(1);
  10.             return;
  11.         case 1:
  12.             source.emplace_back(2);
  13.             return;
  14.         case 2:
  15.             source.emplace_back(4);
  16.             return;
  17.         case 3:
  18.             source.emplace_back(8);
  19.             return;
  20.         }
  21.     }
  22.     short index = 0, remainder = 0, temp=0;
  23.     source.emplace_back(6);
  24.     source.emplace_back(1);
  25.     while (expo > 4) {
  26.         source[index] = source[index] * 2 + temp;
  27.         temp = 0;
  28.         if (source[index] >= 10) {
  29.             remainder = source[index] / 10;
  30.             if (index +1== source.size()) {
  31.                 source.emplace_back(remainder);
  32.                 source[index] = source[index] % 10;
  33.                 index=0;
  34.                 expo--;
  35.             }
  36.             else{
  37.                 source[index + 1] = source[index + 1] * 2 + remainder;
  38.                 if (source[index + 1] >= 10) {
  39.                     temp = source[index + 1] / 10;
  40.                     source[index + 1] = source[index + 1] % 10;
  41.                 }
  42.                 source[index] = source[index] % 10;
  43.                 index = index + 2;
  44.                 if (index >= source.size()) {
  45.                     source.emplace_back(temp);
  46.                     temp = 0;
  47.                 }
  48.             }
  49.         }
  50.         else {
  51.             index++;
  52.         }
  53.         if (index >= source.size()) {
  54.             index = 0;
  55.             expo--;
  56.         }
  57.     }
  58.     if (source[source.size() - 1] == 0) {
  59.         source.pop_back();
  60.     }
  61.    
  62. }
  63. void LogNoJutsu(std::vector<short> source, short expo) {
  64.     std::cout << "2^" << expo << " = ";
  65.     for (int i = source.size()-1; i >=0 ; i--) {
  66.         std::cout << source[i];
  67.     }
  68.     std::cout<<"\n";
  69. }
  70.  
  71. short main() {
  72.     std::vector<short> a;
  73.     short expo = 128;
  74.     for (int i = 0; i <= expo; i++) {
  75.         TwoPowerNoJutsu(a, i);
  76.         LogNoJutsu(a, i);
  77.         a.clear();
  78.         a.empty();
  79.     }
  80.     std::cin.get();
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement