问题标题: 酷町堂:3670 -2进制(scale)

0
0
已解决
董宇昊
董宇昊
初级启示者
初级启示者
#include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
//把十进制数n转换成二进制数输出   
int n,a[105],i;
int main(){
    cin>>n;
    while(abs(n)){  //除2取余 
        a[++i]=n%2;
        n/=2;
    }
    for(int j=i;j>=1;j--){  //倒序输出 
        cout<<a[j];
    }
    return 0;
}
编译都过不了




3670   -2进制(scale)
经验值:1200
题目描述 Description
聪明的你们应该知道2进制从低位到高位(即从右向左)的位权依次是1、2、4、8…。


而现在我们需要你计算的是一个新的进制——-2进制,-2进制它的从低位到高位的位权依次是1、-2、4、-8…。虽然与2进制有一点不一样的地方,但是能表示任何的整数,比如-2进制的1,110,111,100分别表示十进制的1,2,3,4,而-2进制的11,10,1101,1100则表示-1,-2,-3,-4。


如果现在给你一个十进制的整数n,你能求出它的-2进制数吗?



输入描述 Input Description
一行,一个十进制整数n。



输出描述 Output Description
一个-2进制数。如果数字不为0,不能有前导0。



样例输入 Sample Input
-13
样例输出 Sample Output
110111
数据范围及提示 Data Size & Hint
数据范围:-2000000000≤n≤2000000000


样例解释:


从右向左: 

1 * 1 + 1 * (-2) + 1 * 4 + 0 * (-8) +1 * 16 + 1 * (-32) = -13

 


0
0
0
0
0
0
我要回答