|
void ertoshi1()//2进制转十进制 含小数
{
float s1=0,s2=0;
int a=0;
char b[100]={0};
int c[100]={0};
int i=0;
scanf("%d.%s",&a,&b);//输入
cout<<a<<' '<<b<<endl;
while(a>0)//判断 a,做条件
{
s1+=(a%10)*pow(2,i);//一次成2的几次方
a=a/10;//?
i++;
}
for(int j=0;j<strlen(b);j++)//与长度有关
{
s2+=(b[j]-'0')*pow(2,(j+1)*(-1));//用几分之几的方法做
}
cout<<s1+s2;//输出
}
void shitoer1()//十进制转二进制 含小数
{
int a=0;
float b=0;
int cnt1=0,cnt2=0;
int s1[100]={0},s2[100]={0};
float n;
cin>>n;
a=(int)n;//整数
while(a>0)//整数部分
{
s1[cnt1]=a%2;//取余
a=a/2;//短除
cnt1++;
}
b=n-(int)n;//整数
while(cnt2<18)//小数部分 //???
{
s2[cnt2]=(int)(b*2);
b=b*2-(int)(b*2);
cnt2++;
if(b==0) break;
}
if(n>=1)
{
for(int i=cnt1-1;i>=0;i--)//整数
{
cout<<s1[i];
}
}
else cout<<0;
if((n-(int)n)>0)//等不等于0
{
cout<<'.';//小数点
for(int i=0;i<cnt2;i++)
{
cout<<s2[i];
}
}
} |
|