题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述:
多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述:
每行输出对应的二进制数。
示例1
输入
复制
0 1 3 8
输出
复制
0 1 11 1000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
char str[35];
int num[35];
int res[101];
while(scanf("%s",str) != EOF)
{
for(int i = 0;i < strlen(str);++i)
num[i] = str[i]-'0';
int size = strlen(str);
int index = 0;
//控制被除数开始位置
for(int i = 0;i < size;)
{
int temp = 0,remain = 0;
//控制除法运算,竖式除法,从头往后每一位依次作除法
for(int j = i;j < size;++j)
{
temp = (10*remain+num[j])%2;
num[j] = (10*remain+num[j])/2;
remain = temp;
}
res[index++] = remain;
while(num[i] == 0)
++i;
}
for(int i=index-1;i>=0;i--) //逆序输出
{
printf("%d",res[i]);
}
}
return 0;
}