问题描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述
每行输出对应的二进制数。
#include<iostream>
#include<vector>
using namespace std;
string divide(string s,int x){
int remainder=0;
for(int i=0;i<s.size();i++){
int current=remainder*10+s[i]-'0';
s[i]=current/x+'0';
remainder=current%x;
}
int pos=0;
while(s[pos]=='0'){
pos++;
}
return s.substr(pos);
}
int main(){
string s;
while(cin>>s){
vector<int> bi;
while(s.size()!=0){
int last=s[s.size()-1]-'0';
bi.push_back(last%2);
s=divide(s,2);
}
for(int i=bi.size()-1;i>=0;i--){
cout<<bi[i];
}
cout<<endl;
}
return 0;
}
重点在于字符串的除法如何写
string divide(string s,int x){
int remainder=0;
for(int i=0;i<s.size();i++){
int current=remainder*10+s[i]-'0';
s[i]=current/x+'0';
remainder=current%x;
}
int pos=0;
while(s[pos]=='0'){
pos++;
}
return s.substr(pos);
}