⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zoj2449.cpp

📁 最近在acm.zju.edu.cn上通过的题目的代码
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -