牛客网计算机考研复试-KY30-进制转换
题目链接:点这里
题目描述:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
思路:
模拟十进制转为二进制的过程,用string存储该数,遍历这个string,每次保留模2的数,然后除2就行。如十进制123
十进制 除二 模二
123 61 1
061 30 1
030 15 0
015 7 1
007 3 1
003 1 1
001 0 1
模二行从下往上就是对应的二进制1111011
代码:
#include <bits/stdc++.h>
using namespace std;
vector<int>ans;
void convert(string s){
int len = s.size();
while(true){
///判断s是否已经全是0了
bool e = true;
for(int i=0;i<len;i++){
if(s[i]!='0'){
e = false;
break;
}
}
if(e) ///s已经全是0了
break;
else
ans.push_back((s[len-1]-'0')%2);///将s的最后一位模2,结果压进数组。
///s除2
int t=0;///保存前面是否还有1
for(int i=0;i<len;i++){
int num = s[i]-'0';
int m = t*10+num;
//cout << "m: " << m << endl;
s[i] = (m/2)+'0';
t = num%2;
}
}
}
int main(){
string x;
while(cin >> x){
//如果输入的是0,输出0
if(x.length()==1 && x=="0"){
cout << 0 << endl;
continue;
}
ans.clear();///记得初始化vector数组
convert(x);
for(int i=ans.size()-1;i>=0;i--)
cout << ans[i];
cout << endl;
}
return 0;
}