http://ac.jobdu.com/problem.php?pid=1138
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
每行输出对应的二进制数。
0 1 3 8
0 1 11 1000
#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; }
原文:http://www.cnblogs.com/shenckicc/p/6971417.html