CareerCup-5.2
Given a (decimal - e g 3.72) number that is passed in as a string, print the binary representation. If the number can not be represented accurately in binary, print “ERROR”.
答案没有考虑负数的情况。但是有没有负数从题目无法推断出。
#include <iostream>
#include <bitset>
using namespace std;
typedef int Data;
void printDecimal(string s)
{
int size = s.size();
if(size<1)
{
cout<<"Error"<<endl;
return;
}
string r;
int i=0;
if(s[i] == '+' || s[i] == '-')
{
r += s[i++];
if(size == 1)
{
cout<<"Error"<<endl;
return;
}
} else {
r += '+';
}
int index = s.find(".", i);
if(index < 1)
{
cout<<"Error"<<endl;
return;
}
string s1 = s.substr(0, index);
string s2 = s.substr(index+1, size);
if(s1.size() < 1 || s2.size() < 1)
{
cout<<"Error"<<endl;
return;
}
int d1 = atoi(s1.c_str());
int d2 = atoi(s2.c_str());
int len = 1;
for(int j=s2.size()-1; j>=0; j--)
{
len *= 10;
}
do
{
r += '0' + d1%2;
d1 = d1/2;
} while(d1 != 0);
reverse(r.begin()+1, r.end());
r += '.';
int count = 32;
do
{
d2 *= 2;
r += d2>=len?'1':'0';
d2 = d2%len;
count--;
} while(d2 != 0 && count > 0);
if(count == 0)
r = "ERROR";
cout<<r<<endl;
};
int main()
{
string s = "3.375";
printDecimal(s);
system("pause");
};