问题 C: 进制转换
时间限制: 1 Sec 内存限制: 32 MB
题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
985 211 1126
样例输出
1111011001 11010011 10001100110
经验总结
其实就是模拟十进制转二进制的 “除2取余,逆序排列” 的思想,输出的二进制数组得开大一点,毕竟30位十进制转换为二进制还是很长的,1000完全足够~~
AC代码
#include<cstdio>
#include<cstring>
int main()
{
char str[1000];
int i,a[1000],res[1000];
while(~scanf("%s",str))
{
int k=strlen(str),len=strlen(str),num=0;
while(len>0)
{
res[num++]=(str[k-1]-'0')%2;
int carry=0;
for(i=0;i<k;i++)
{
int s=((str[i]-'0')+10*carry)/2;
carry=(str[i]-'0')%2;
str[i]=s+'0';
}
while(str[k-len]=='0')
len--;
}
for(i=num-1;i>=0;i--)
printf("%d",res[i]);
printf("\n");
}
return 0;
}