zoj2449.cpp

来自「最近在acm.zju.edu.cn上通过的题目的代码」· C++ 代码 · 共 55 行

CPP
55
字号
#include<iostream>
#include<string>

using namespace std;

void getlast(long long &l, int &o, int &z) {
    o=0;
    z=0;
    if (l!=0) {
        while (l%2==0) {
            l/=2;
            z++;
        };
        while (l%2==1) {
            l/=2;
            o++;
        };
    };
}

void putbits(long long &l, int o, int z) {
    while (z>o+1) {
        l*=2;               
        z--;
    };
    while (z>1) {
        l=(l*2+1)*2; 
        z--;
        o--;
    }
    l*=2;          
}

long long crunchbits(long long l) {
    int o,z;
    getlast(l,o,z);
    if (l==0)
        putbits(l,o,z);
    else  {
        l++;             
        o--;
        z++;
        putbits(l,o,z);
    }
    return l;
}

int main() {
    long long n;
    while(scanf("%l64d",&n),n>=0) {
        printf("%l64d\n",crunchbits(n));
    }
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?