将一个十进制数转化为二进制数,只需要不断除以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");
}
}