题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=44
C语言源码:
#include<stdio.h>
#include<string.h>
int main()
{
char s[40];
int a[40],t[200],i,len,k,x,top,b[40];
while(scanf("%s",s)!=EOF)
{
top=0;
k=0;
getchar();
len=(int)strlen(s);
i=0;
while(i<len)
{
a[len-1-i]=s[i]-'0';
i++;
}//将s中数赋值到a中,并且逆置,高位在数组a末尾
while(a[len-1]==0)
len--;
if(len<=0)
printf("0\n");
else
{
while(len>0)
{
k=0;
for(i=len-1;i>=0;i--)
{
x=k*10+a[i];
b[i]=x/2;
k=x%2;
}//将a中d数除以2,除数放在b中
t[top++]=a[0]%2;//余数放在t中
for(i=0;i<len;i++)
a[i]=b[i];
if(a[len-1]==0)
len--;
}
for(i=top-1;i>=0;i--)
printf("%d",t[i]);
printf("\n");
}
}
}