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"); };