将一个十进制数转化为二进制数,只需要不断除以2即可,由于数据30位,属于高精度除以低精度数据问题,使用数组逆序存储高精度数,然后逐位除以2即可。 代码:

#include<iostream>
using namespace std;
int a[35],cnt,ans[200],tot;
void div(){
    int add=0,t;
    for(int i=cnt;i>0;--i){
        t=a[i]+add;
        if(t&1)    add=10;
        else add=0;
        a[i]=t>>1;
    }
    while(cnt>0&&a[cnt]==0)    cnt--;
}
void tran(){
    tot=0;
    while(true){
        if(!cnt)    break;
        if(a[1]&1)    ans[++tot]=1;
        else ans[++tot]=0;
        div(); 
    }
}
int main(){
    string s;
    while(cin>>s){
        int n=s.length();
        for(int i=0;i<n;++i)    a[n-i]=s[i]-'0';
        cnt=n;
        tran();
        for(int i=tot;i>=1;--i)    printf("%d",ans[i]);
        printf("\n");
    }
}