sol

cookiebus 2023-03-11 8:40:55 2023-03-11 9:57:30 15 返回题目

和正常二进制数的计算一样,只不过二进制计算的时候是向下取整,负二进制是向上取整。
以6为例 二进制计算 
      6/2=3 余数 0 
      3/2=1 余数 1 (向下取整所以3/2=1)
      1     余数 1  结果为 110;
    负二进制计算
      6/-2=-3 余数 0
      -3/-2=2 余数 1(向上取整-3/-2=2)
      2/-2=-1 余数 0
      -1/-2=1 余数 1
      1       余数 1 结果为 11010
#include <bits/stdc++.h>
using namespace std;
int n, x = -2;
void f(int a) {
    if (a == 0) {
        return;
    }
    int m = (a % x + 2) % 2;
    f((a - m) / x);
    cout << m;
}
int main() {
    cin >> n;
    if (n == 0) {
        cout << 0;
        return 0;
    }
    f(n);
    return 0;
}
{{ vote && vote.total.up }}