- 十进制大数转二进制。
code
#include <bits/stdc++.h>
using namespace std;
char s[35];
struct bigint{
char s[35];
int dig[35];
int cnt;
void init(){
memset(dig,0,sizeof(dig));
cnt=0;
}
int read(){
init();
int st=scanf("%s",s);
int n=strlen(s);
for(int i=n-1;i>=0;i--){
dig[cnt++]=s[i]-'0';
}
return st;
}
int size(){
return cnt;
}
bool isZero(){
if(cnt==1 && dig[0]==0){
return true;
}else{
return false;
}
}
int mod(int x){
return dig[0]%2;
}
void divide(int x){
int t=dig[cnt-1];
while(cnt>1 && t<x){
dig[cnt-1]=0;
cnt--;
t=t*10+dig[cnt-1];
}
if(t<x){
cnt=1;
dig[0]=0;
return;
}
for(int i=cnt-1;i>=0;i--){
dig[i]=t/x;
t%=x;
if(i>0){
t=t*10+dig[i-1];
}
}
}
void write(){
for(int i=cnt-1;i>=0;i--){
printf("%d",dig[i]);
}
printf("
");
}
}a;
int main(){
while(~a.read()){
if(a.isZero()){
printf("0
");
}else{
stack<int> st;
while(!a.isZero()){
//a.write();
st.push(a.mod(2));
a.divide(2);
}
printf("siz %d
",st.size());
while(!st.empty()){
printf("%d",st.top());
st.pop();
}
printf("
");
}
}
return 0;
}