Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <limits.h>
- #include <bitset>
- using namespace std;
- #define print(var) cout << #var << ": " << var << endl;
- #define println(var) cout << var << endl;
- unsigned long long getN(unsigned long long n, unsigned long long l) {
- string binNum = bitset<64>(n).to_string();
- binNum.erase(0, 64 - l );
- for (unsigned long long i = 0; i < l; i++) {
- if (binNum.at(i) == '0') {
- binNum.at(i) = '2';
- }
- else {
- binNum.at(i) = '3';
- }
- }
- return stoll(binNum);
- }
- string solve(unsigned int num) {
- unsigned long long tmpnum = 1;
- tmpnum = tmpnum << num;
- string tmpstr = to_string(tmpnum);
- unsigned long long tmplen = tmpstr.length();
- unsigned long long lastlen = tmplen;
- unsigned long long loopTo = 1;
- loopTo = loopTo << tmplen;
- unsigned long long i = 0;
- unsigned long long lastI = i;
- //print(tmpnum);
- //print(tmplen);
- do {
- if (i == loopTo) {
- if (tmplen == lastlen) {
- i = lastI;
- tmplen++;
- }
- else {
- lastlen = tmplen;
- lastI = 0;
- loopTo = 1;
- loopTo = loopTo << tmplen;
- }
- }
- if ( !(i & 0b01)) {
- if (getN(i, tmplen) % tmpnum == 0) {
- //print(tmpnum);
- //print(i);
- //print(lastlen);
- //print(getN(i, tmplen));
- //cout << i << ": " << tmplen << endl;
- //_getch();
- return to_string(getN(i, tmplen));
- }
- }
- //cout << getN(i, tmplen) % tmpnum << endl;
- } while (i++ < loopTo);
- //} while ((getN(i, tmplen) % tmpnum != 0) && (i++ < loopTo));
- return to_string(getN(i-1, tmplen));
- }
- int main() {
- int tests;
- cin >> tests;
- cin.ignore();
- for (int test = 0; test < tests; test++) {
- unsigned int n;
- cin >> n;
- //print(n);
- if ( n > 2 ) {
- println(solve(n));
- }
- else if (n <= 2) {
- println("NO");
- }
- else {
- println("OUT_OF_RANGE_ERR");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment