计蒜客 难题题库 221 N的-2进制表示

对于十进制整数N,试求其-2进制表示。 例如,因为  1*1  +  1*-2  +  1*4  +  0*-8  +1*16  +  1*-32  =  -13  ,所以(-13)_10  =  (110111)_-2。

输入一个整数,代表要转换的十进制数。

输出一个整数,代表N的-2进制表示。

|N|  < =  2000000000

样例1

输入:

-13

输出:

110111



#include<iostream>
#include<stack>
using namespace std;

int main(){
    int n;
    cin >> n;
    stack<int> sb;
    if(n == 0){                     // WA 特殊情况
        cout << 0;
        return 0;
    }
    while(n){
        if(n % -2 < 0){
            sb.push(n % -2 + 2);    // 保证余数为正
            n = n / -2 + 1;
        }else{
            sb.push(n % -2);
            n /= -2;
        }
    }
    while(!sb.empty()){
        cout << sb.top();
        sb.pop();
    }
}


你可能感兴趣的:(OJ,计蒜客)