题目:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入格式:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出格式:
每行输出对应的二进制数。
输入样例:
985
211
1126
输出样例:
1111011001
11010011
10001100110
注意点:
数字范围为1030,故用字符串储存。大数进制转换用逐位除转换数。
AC代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string n;
n.resize(35,' ');//初始字符串定义
while(scanf("%s",&n[0])!=EOF){
string m,ans;//n为被除数,m为商
n.erase(n.find(' ')-1);
int len=n.size();
int i=0,t=0,l=0;
do{
i=0,t=0;
m.erase();
do{
l=t*10+n[i]-'0';
m=m+(char)(l/2+'0');
t=l%2;
i++;
}while(i<len);
ans=(char)(t+'0')+ans;
while(m[0]=='0'&&len>1){//整理m为有效数字
string::iterator p=m.begin();
m.erase(p);
len--;
}
n=m;
}while(n[0]!='0');//最后被除数为0
cout<<ans<<endl;
n.resize(35,' ');//重置n
}
return 0;
}