进制转换
程序员文章站
2024-03-11 20:04:55
...
问题描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
解题思路
将十进制数转换为二进制数的一般实现思路是:`
vector<int> remains;
while(n){
remains.push(n%2);
n=n/2;
}
那么这道题的本质是大数除法。
从基本除法除法开始:
可以看出每一步都是上一步的余数和当前数字构成的两位数对除数的除法,依次循环进行,直到最后一个数字,最终的余数就是该被除数除以除数的商。
结合上述两者可以得出本题的思路,在每一次除法中,从最高的非0位开始按照上述除法过程,并将每一位数字更新为商,到最后一位得到的余数就是本次除以2的余数,将其保存以来,然后从下一个非零最高位继续开始。
实现代码
#include <iostream>
#include <string>
using namespace std;
int data[31];
int rec[3000];
int main(){
string str;
int i;
while(getline(cin,str)){
int len=str.length();
for(i=0;i<len;i++)
data[i]=str[i]-'0';
int index=0;
for(i=0;i<len;){
int remain=0,tmp=0;
for(int j=i;j<len;j++){
tmp=(remain*10+data[j])%2;
data[j]=(remain*10+data[j])/2;
remain=tmp;
}
rec[index++]=remain;
while(i<len&&data[i]==0)
i++;
}
for(int j=index-1;j>=0;j--)
cout<<rec[j];
cout<<endl;
}
return 0;
}