zoukankan      html  css  js  c++  java
  • A

    Description

    Inexperienced in the digital arts, the cows tried to build a calculating engine (yes, it's a cowmpouter) using binary numbers (base 2) but instead built one based on base negative 2! They were quite pleased since numbers expressed in base −2 do not have a sign bit.

    You know number bases have place values that start at 1 (base to the 0 power) and proceed right-to-left to base^1, base^2, and so on. In base −2, the place values are 1, −2, 4, −8, 16, −32, ... (reading from right to left). Thus, counting from 1 goes like this: 1, 110, 111, 100, 101, 11010, 11011, 11000, 11001, and so on.

    Eerily, negative numbers are also represented with 1's and 0's but no sign. Consider counting from −1 downward: 11, 10, 1101, 1100, 1111, and so on.

    Please help the cows convert ordinary decimal integers (range -2,000,000,000..2,000,000,000) to their counterpart representation in base −2.

    Input

    Line 1: A single integer to be converted to base −2

    Output

    Line 1: A single integer with no leading zeroes that is the input integer converted to base −2. The value 0 is expressed as 0, with exactly one 0.

    Sample Input

    -13

    Sample Output

    110111

    Hint

    Explanation of the sample:

    Reading from right-to-left:
    1*1 + 1*-2 + 1*4 + 0*-8 +1*16 + 1*-32 = -13


    注:任意的负进制也是如此做法
    #include<cstdio>
    #include<stack>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll read()//输入外挂
    {
    	ll x=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    	return x*f;
    }
    int main()
    {
        int n,i;
        n=read();
        stack<int>s;
        if(!n) {printf("0
    ");return 0;}//0 需要特判
        while(n)
        {
            for(i=0;;++i)
            if((n-i)%2==0) break;
            s.push(i);
            n=(n-i)/(-2);
        }
        while(!s.empty()){
            printf("%d",s.top());
            s.pop();}
            printf("
    ");
    
    }
    

      

  • 相关阅读:
    批量备份mysql数据库(shell编程)
    批量检查多个网址是否正常(shell编程)
    就linux三剑客简单归纳
    sql语句浅谈以及mysql遇到的问题解决见解
    linux shell每天一阅 -- 安装nginx以及apache
    Linux文件系统检查错误
    Linux账号管理和ACL
    简书博客
    Block内的强引用
    一次没有意义的优化
  • 原文地址:https://www.cnblogs.com/orchidzjl/p/4393704.html
Copyright © 2011-2022 走看看