http://ac.jobdu.com/problem.php?pid=1138
- 题目描述:
-
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
- 输入:
-
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
- 输出:
-
每行输出对应的二进制数。
- 样例输入:
-
0 1 3 8
- 样例输出:
-
0 1 11 1000
- 来源:
- 2008年北京大学软件所计算机研究生机试真题
- 十进制转化二进制最基本的还是除二取余法。这里只是将数字已字符串形式给出,核心的算法是没有改变的。
-
#include <iostream> #include <string.h> #include <cstring> char binvec[1001]; using namespace std; void decTobin(string str){ int size=0; int len = str.size(); int sum=1; // 初始化sum不为0即可 while(sum){ sum=0; for(int i=0; i<len; i++) { int tmp=(str[i]-'0')/2; //一个数除以2就是每个位除以2 sum+=tmp; //当这个数每个位全为0的时候,sum==0 if(i==len-1){ binvec[size++]=(str[i]-'0') % 2+ '0'; } else{ str[i+1]=str[i+1]+(str[i]-'0')%2*10; } str[i]=tmp+'0'; } } } void reverse_out(){ //cout << binvec << endl; for(int i=strlen(binvec)-1; i>=0; i--){ cout << binvec[i] ; } cout << endl; } int main() { string str; while(cin>>str){ memset(binvec, '\0', sizeof(binvec)); decTobin(str); reverse_out(); } return 0; }