利用短除法,一直除至0,输出的数通过栈反序输出。
通过字符数组接受数据,转换成int存入队列q1中,将队列中的数据一次取出对2取余,整除,存入第二个队列q2,直到第一个队列为空,将去q1=q2;循环,直到q1为空

#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
int main(){
    char ch[35];
    while(cin>>ch){
        queue<int> q1;
        stack<int> s1;
        for(int i=0;i<strlen(ch);i++){//装换为int
            int temp=ch[i]-'0';
            q1.push(temp);//存入队列
        }
        while(!q1.empty()){//结束条件,队列为空
            int cf=0;//进位;
            queue<int> q2;//临时队列,存中间数据
            while(!q1.empty()){
                int temp=q1.front();
               // cout<<temp<<endl;
                q1.pop();
                int sum=cf*10+temp;
                if(sum%2==1){
                    cf=1;
                }else{
                    cf=0;
                }
                int next=sum/2;
                //判断第一个数为0的情况
                if(next==0){
                    if(!q2.empty()){
                        q2.push(next);
                    }
                }else{
                    q2.push(next);
                }
            }
            q1=q2;
            s1.push(cf);//结果放入栈中
        }
        while(!s1.empty()){//输出
            cout<<s1.top();
            s1.pop();
        }
        cout<<endl;
    }
    return 0;
}