第1种方法:#include <iostream>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
stack<int> st;
queue<int> q;
const int maxn = 30;
void print(string &s)
{
char ch[20];
strcpy(ch, s.c_str());
float n = atof(ch);
int integer = (int)n;
float decimal = n - integer;
int t;
while(integer >= 2)
{
t = integer % 2;
st.push(t);
integer /= 2;
}
st.push(integer);
while (decimal != 0)
{
if(q.size() > maxn)
{
cout << "ERROR" << endl;
return;
}
decimal *= 2;
t = int(decimal);
q.push(t);
if(decimal >= 1)
decimal -= 1;
}
while (!st.empty())
{
cout << st.top();
st.pop();
}
cout << '.';
while (!q.empty())
{
cout << q.front();
q.pop();
}
}
int main(void)
{
string s;
cin >> s;
print(s);
return 0;
}
第二种方法:
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 30;
string print(string &s)
{
char ch[20];
strcpy(ch, s.c_str());
double n = atof(ch);
int integer = (int)n;
float decimal = n - integer;
int t;
string intres = "", decires = "", res = "";
while(integer > 0)
{
t = integer % 2;
if(t)
intres = "1" + intres;
else
intres = "0" + intres;
integer /= 2;
}
while (decimal > 0)
{
decimal *= 2;
if(decimal >= 1)
{
decires += "1";
decimal -= 1;
}
else
decires += "0";
if(decires.size() > 30)
return "ERROR";
}
return intres + "." + decires;
}
int main(void)
{
string s;
cin >> s;
string re = print(s);
cout << re << endl;
return 0;
}