使用辗转相除法,将十进制转化为二进制数
#include<iostream>
using namespace std;
const int N=1000;
int zheng(float x)
{
int a=x;//取十进制的整数位
int res[N]; //自上向下除后的每一位数
int sum=0;//最后所得的二进制数
int i=1;//存入数组的下标
while(i)
{
if(a==0)//直至整数为0后,停止运算
break;
res[i]=a%2;//每一位所得数
a/=2;
i++;
}
for(int j=i-1;j>0;j--)//将运算所得的数字反过来加在sum中
{
sum=sum*10+res[j];
}
cout<<endl;
return sum;//得到二进制的整数位
}
string xiaoshu(float x)//最多保留8位
{
int a=x;//取十进制的整数位
x-=a;//剩余小数位
string s;//最后所的小数的字符串
for(int i=0;i<8;i++)
{
s+=((int)(x*2.0)+'0');//将得到的数以字符的形式存入字符串s中
//将x*2>=1和 x*2<1区分
if(x*2.0>=1.0)
x=x*2.0-1.0;
else
x*=2.0;
if(x==0.0)//直至小数为0后,停止运算
break;
}
return s;
}
int main()
{
float x;
cin>>x;
cout<<zheng(x)<<"."<<xiaoshu(x);
}