将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
每行输出对应的二进制数。
大整数,longlong存不下,用数组,模仿手写除法的思想。
#include<iostream>
#include<cstdio>
#include<math.h>
#include<string.h>
using namespace std;
int main(){
int x,y;
char n[100];
char ans[100];
while(cin>>n){
int j=0,i;
int sum=1;
while(sum){
sum=0;
int len=strlen(n);
for(i=0;i<len;i++){
x=(n[i]-'0')%2; //余数
y=(n[i]-'0')/2; //商
// cout<<"x="<<x<<" y="<<y<<endl;
sum=sum+y; //将商每一位都加起来,看看是否为0
// cout<<"sum="<<sum<<endl;
if(i==len-1){
ans[j++]=x+'0'; //得到一个最终的余数
// cout<<"ans="<<ans[j-1]<<" "<<ans[j]<<" "<<x<<endl;
}
else{
n[i+1]=n[i+1]+x*10;//把它当成是数字来看了
}
n[i]=y+'0';
// cout<<"n[i]="<<n[i]<<endl;
}
}
for(i=j-1;i>=0;i--){
cout<<ans[i];
}
cout<<endl;
}
return 0;
}
/**************************************************************
Problem: 1138
User: WZDCJ0206
Language: C++
Result: Accepted
Time:230 ms
Memory:1520 kb
****************************************************************/