一.题目描述:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出:
每行输出对应的二进制数。
样例输入:
0
1
3
8
样例输出:
0
1
11
1000
二.题目分析
模拟长整数除法
三.代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int num[31],i,j,yu[100];
char str[31];
while(scanf("%s",str)!=EOF)
{
for(i=0;str[i];i++)
num[i]=str[i]-'0';
int jie=0,len=i,j=0,temp; //000000
while(1)
{
i=0;
while(num[i]==0&&i<len)
i++;
if(i==len)
break;
jie=0;
for(;i<len;i++)
{
temp=jie*10+num[i];
num[i]=temp/2;
jie=temp%2;
}
yu[j++]=jie;
}
if(j==0)
printf("0\n");
else
{
for(i=j-1;i>=0;i--) //余数逆序输出
printf("%d",yu[i]);
printf("\n");
}
}
return 0;
}