将一个长度最多为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 ****************************************************************/