-
题目描述:
-
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
-
输入:
-
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
-
输出:
-
每行输出对应的二进制数。
-
样例输入:
-
0 1 3 8
-
样例输出:
-
0 1 11 1000
-
来源:
-
2008年北京大学软件所计算机研究生机试真题
// 三十位转换为二进制.cpp : 定义控制台应用程序的入口点。 //
// 三十位转换为二进制.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string.h> char str [31]; int _tmain() { while(scanf("%s",str)){ int len=strlen(str); char str2[200]; int size=0; int sum=1; while (sum) { sum=0; for(int i=0;i<len;i++){ int x=str[i]-'0'; //转换为数字 int d=x/2; //求该位的商 sum+=d; //用作循环的判断sum,即当所有位上的商为0,退出循环 if(i<len-1){ //当没有执行到最后一位时,将下一位的数字转换为:上一位余数的十倍+该位的数字 str[i+1]=x%2*10+str[i+1]; //**str[i]还是字符形式,所以只需要加上偏移量就可以了 } if(i==len-1){ //当执行到最后一位,直接将所得的余数存到二进制数组里面 str2[size++]=x%2+'0'; //**这里是数字,还需要加上'0'的始址 } str[i]=d+'0'; //将除数数组变为这次循环下的商数组,继续下次循环用 } } for(int i=size-1;i>=0;i--) printf("%c",str2[i]); } return 0; }