版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/xunalove/article/details/87880850
题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
985
211
1126
样例输出
1111011001
11010011
10001100110
因为要求10进制数字大约不超过30个,long long int大约范围大约为 所以输入必须使用字符数组,然后模拟短除法执行的过程。
#include<stdio.h>
#include<string.h>
int main()
{
char a[32];
while(scanf("%s",&a)!=EOF)
{
int b[32]={0};
for(int i=0; i<strlen(a); i++)//将字符串转换为整数数组
b[i] = a[i] - '0';
int len = strlen(a),k=0,c=0, i=0;
char ans[200];
//printf("len = %d\n",len);
while(i<len){
ans[k++] = (b[len-1] % 2) + '0';
c = 0;//每一轮要清0
//模拟一次整数除2的过程
for(int j=i; j<len; j++)
{
int temp = b[j];
b[j] = (b[j]+c) / 2 ;
if(temp%2==1)//高位不够除2,把当前位借给后一位
c = 10;
else
c = 0;
if(b[i] == 0)
i++;
}
}
//printf("k==%d\n",k);
for(int i=k-1; i>=0; i--)
printf("%c",ans[i]);
printf("\n");
}
}