<center style="color:rgba(0,0,0,.870588);font-family:Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif;font-size:14px;">
</center>
10进制 VS 2进制
时间限制: 1 Sec 内存限制: 32 MB</center>
题目描述
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入
一个1000位(即10^999)以内的十进制数。
输出
输入的十进制数的二进制逆序数。
样例输入
985
样例输出
623
#include<stdio.h>
#include<string.h>
int data[10000];
int main()
{
char a[1010];
int i,j,k,n,len,sum;
while(scanf("%s",a)!=EOF)
{
len=strlen(a);
data[j=0]=0;
sum=1;
for(i=0;i<len;i++)
a[i]-='0';
while(sum)
{
sum=0;
for(i=0;i<len;i++)
{
k=a[i]/2;sum+=k;
if(i==len-1)
data[j++]=a[i]%2;
else
a[i+1]+=a[i]%2*10;
a[i]=k;
}
}
if(!j)
j++;
len=j;sum=1;j=0;
while(sum)
{
sum=0;
for(i=0;i<len;i++)
{
k=data[i]/10;
sum+=k;
if(i==len-1)
a[j++]=data[i]%10+'0';
else
data[i+1]+=data[i]%10*2;
data[i]=k;
}
}
for(i=j-1;i>=0;i--)
printf("%c",a[i]);
printf("\n");
}
return 0;
}