zxh23682 的博客

zxh23682 的博客

骗分过样例,暴力出奇迹。 爆搜挂着机,打表出省一。

题解 AT4239 [ABC105C] Base -2 Number

posted on 2021-04-26 18:35:35 | under 题解 |

题意

给定一个整数 $n$,将其转换为 $-2$ 进制数并输出。

思路

和转换为 $2$ 进制数一样,利用短除法进行操作,用一个 vector 保存答案。输出时将所有 $-1$ 换成 $1$ 后输出。

这里 $n=0$ 时要特判。

代码

#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v; // 保存答案 
int main() {
    cin >> n;
    if (n == 0) {
        puts("0");
        return 0;
    }
    int cnt = -1;
    while(n) { // 短除 
        v.push_back(n % (-2));
        cnt++;
        n /= (-2);
        if (v[cnt] == -1) n++;
    }
    for(int i = v.size() - 1; i >= 0; --i) printf("%d", v[i] == -1 ? 1 : v[i]);
    return 0;
}