将一个长度最多为30位数字的十进制非负整数转换为二进制数输出

本文介绍了一个C++程序,该程序通过不断读取输入的字符串并进行处理,包括去除前导零、将字符串中的每个字符转换为二进制对应的整数,以及将字符串按特定规则进行压缩和转换。此程序展示了如何使用C++标准库中的字符串和向量容器,以及位运算等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "iostream"
#include "string"
#include "cmath"
#include "vector"
#include "algorithm"

using namespace std;
vector<int> a;
string ss;
int main(){
    while (cin >> ss){
        while(1){
            bool update = 0;
            string::iterator it;
            for (it = ss.begin(); it != ss.end(); it++){
                if (*it != '0') {
                    update = 1;
                    break;
                }

            }
            //
            // cout << *it << endl;
            //
            if (!update)    break;
            else {
                string::iterator p = ss.end() - 1;
                if ((*p - '0') & 1) a.push_back(1);
                else a.push_back(0);
                //
                // for (vector<int>::iterator i = a.begin(); i != a.end(); i++){
                //  printf("%d\n",*i);
                // }
                //
                int flag = 0;
                for (p = it; p != ss.end(); p++){
                    int temp;
                    temp = (flag * 10 + (*p - '0')) / 2;
                    flag = flag * 10 + (*p - '0') - temp * 2;
                    int x = p - ss.begin();
                    ss[x] = temp + '0';
                }
                // cout << *p <<endl;
            }
        }
        if (a.empty( )) a.push_back(0);
        reverse(a.begin(), a.end());
        for (vector<int>::iterator i = a.begin(); i != a.end(); i++){
            printf("%d",*i);
        }
        printf("\n");
        a.clear();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值