yordanganev

cp2019_zad5_fail

Apr 3rd, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <limits.h>
  4. #include <bitset>
  5.  
  6. using namespace std;
  7.  
  8. #define print(var) cout << #var << ": " << var << endl;
  9. #define println(var) cout << var << endl;
  10.  
  11. unsigned long long getN(unsigned long long n, unsigned long long l) {
  12.     string binNum = bitset<64>(n).to_string();
  13.     binNum.erase(0, 64 - l );
  14.    
  15.     for (unsigned long long i = 0; i < l; i++) {
  16.         if (binNum.at(i) == '0') {
  17.             binNum.at(i) = '2';
  18.         }
  19.         else {
  20.             binNum.at(i) = '3';
  21.         }
  22.     }
  23.  
  24.     return stoll(binNum);
  25. }
  26.  
  27. string solve(unsigned int num) {
  28.     unsigned long long tmpnum = 1;
  29.     tmpnum = tmpnum << num;
  30.     string tmpstr = to_string(tmpnum);
  31.  
  32.     unsigned long long tmplen = tmpstr.length();
  33.     unsigned long long lastlen = tmplen;
  34.     unsigned long long loopTo = 1;
  35.     loopTo = loopTo << tmplen;
  36.  
  37.     unsigned long long i = 0;
  38.     unsigned long long lastI = i;
  39.  
  40.     //print(tmpnum);
  41.     //print(tmplen);
  42.  
  43.     do {
  44.  
  45.         if (i == loopTo) {
  46.             if (tmplen == lastlen) {
  47.                 i = lastI;
  48.                 tmplen++;
  49.             }
  50.             else {
  51.                 lastlen = tmplen;
  52.                 lastI = 0;
  53.                 loopTo = 1;
  54.                 loopTo = loopTo << tmplen;
  55.             }
  56.         }
  57.  
  58.         if ( !(i & 0b01)) {
  59.             if (getN(i, tmplen) % tmpnum == 0) {
  60.  
  61.                 //print(tmpnum);
  62.                 //print(i);
  63.                 //print(lastlen);
  64.                 //print(getN(i, tmplen));
  65.                 //cout << i << ": " << tmplen << endl;
  66.  
  67.                 //_getch();
  68.                 return to_string(getN(i, tmplen));
  69.             }
  70.         }
  71.         //cout << getN(i, tmplen) % tmpnum << endl;
  72.  
  73.     } while (i++ < loopTo);
  74.     //} while ((getN(i, tmplen) % tmpnum != 0) && (i++ < loopTo));
  75.  
  76.     return to_string(getN(i-1, tmplen));
  77.  
  78. }
  79.  
  80.  
  81. int main() {
  82.  
  83.     int tests;
  84.     cin >> tests;
  85.     cin.ignore();
  86.     for (int test = 0; test < tests; test++) {
  87.         unsigned int n;
  88.         cin >> n;
  89.        
  90.         //print(n);
  91.         if ( n > 2 ) {
  92.             println(solve(n));
  93.         }
  94.         else if (n <= 2) {
  95.             println("NO");
  96.         }
  97.         else {
  98.             println("OUT_OF_RANGE_ERR");
  99.         }
  100.  
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment