#include<bits/stdc++.h>
using namespace std;
string handle_int(string x){
int q,z=0;
//将字符串的整数部分转化为int以便运算
for(int i=0; i<x.size();i++){
if(x[i]=='.')break;
if(x[i]>='0'&&x[i]<='9'){
int p = x[i]-'0';
z = z*10+p;
}
}
//得出整数部分的二进制字符串,注意str的加减顺序由得出的数字是高位还是低位决定。
string str="";
while(z){
q = z%2;
str = (char)(q+'0') + str;
z /= 2;
}
//返回处理好的二进制整数字符串
return str;
}
string handle_float(string x){
int z=0,f=1;
float s = 0.0;
int j = -1;
//将字符串的小数部分转化为普通float以便运算
for(int i=0; i<x.size();i++){
if(x[i]=='.') {
f=0;
continue;
}
if(f)continue;
int p = (int)(x[i]-'0');
float q = pow(10,j);
s += q*p;
j--;
}
//创建str利用乘二原则求出小数的二进制
string str2=".";
while(s){
float t = s*2;
//对t向下取整,得出s的二进制小数位
int c = (int)t;
str2 = str2 + (char)(c+'0');
//求十进制化二进制小数的规则:当大于1时,取1整并原数-1再二乘
if(t>=1){
s = t-1;
}
else s = t;
}
//返回二进制小数部分的字符串
return str2;
}
int main()
{
string x;
cin >> x;
string s1;
string s2;
s1 = handle_int(x);
s2 = handle_float(x);
cout << s1+s2<<endl;
}
C++用字符串将整数和小数-转-二进制
最新推荐文章于 2024-03-10 15:35:46 发布