只能输入正数。十进制转化八、十六进制与十进制转化二进制一样道理。
#include<stdio.h>
#include<string.h>
#define M 20
void two(int sum1)
{
int i,a,b,j=0;
char c[M];
a=sum1;
while(sum1!=0)
{j++;sum1/=2;}
for(i=0;i<j;i++)
{
b=a%2;
a/=2;
c[j-i-1]=b+48;
}
c[i]='\0';
printf("%s.",c);
}
int qi(int j)
{
int i,m,n;
m=n=10;
for(i=0;i<j-1;i++)
m=m*n;
return m;
}
void two_xiaoshu(int sum2,int j)
{
int i,a,b,a1;
a=sum2;
a1=qi(j);
for(i=0;i<M;i++)
{
b=a*2;
if(b>=qi(j))
{printf("1");
a=b-a1;}
else
{printf("0");
a*=2;}
}
printf("\n");
}
void main()
{
char a[M];
int i=0,j=0,sum1=0,k=1,g;
int sum2=0;
printf("Input:");
gets(a);
for(;a[i]!='.' && a[i]!='\0';i++)
sum1=sum1*10+a[i]-'0';
g=i+1;
two(sum1);
i=strlen(a);
for(;g<i;g++)
{sum2=sum2*10+a[g]-'0';j++;}
two_xiaoshu(sum2,j);
}