B. 【六月份 -- 基础语法组】-- T2 -- 幸运数

· · 个人记录

https://cspjs.online/contest/699/problem/2

#include <iostream>
#include <stdio.h>
using namespace std;
typedef long long ll;
ll a[110];
int main() {
    freopen("lucknum.in", "r", stdin);
    freopen("lucknum.out", "w", stdout);
    for (int i = 1; i <= 55; i++) {
        a[i] = a[i - 1] + (1ll << i);
    }
    long long n;
    cin >> n;
    for (int i = 55; i >= 1; i--) {
        if (a[i - 1] < n) {
            if (n - (1ll << (i - 1)) > a[i - 1]) {
                cout << 7;
                n -= (1ll << i);
            } else {
                cout << 2;
                n -= (1ll << (i - 1));
            }
        }
    }
    return 0;
}