首页 > 代码库 > 九度-题目1138:进制转换
九度-题目1138:进制转换
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; }
九度-题目1138:进制转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。