思路:沒啥說的,本想用java寫,沒找到double進制轉換的對應函數。。就該用c++,本想偷懶下,直接用string,然後找個string轉化double的函數,最後還是失敗了 用sstream,格式會變。。發現其實最簡單的方法就是直接用數組模擬。。一直想偷懶下,結果繞了一個圈。。。 先提供個double型化二進制的模版,這裡不考慮格式。。 [cpp] #include<sstream> #include<stdlib.h> #include<algorithm> #include<iostream> using namespace std; string::iterator it; string Trans(long Integer) { if(Integer == 0) return "0"; string temp=""; while(Integer) { temp = char(Integer%2+48)+temp; Integer/=2; } return temp; } string Trans(double Decimal) { string temp="."; int n = 20; while(Decimal&&n) { Decimal*=2; temp = temp + char(int(Decimal)+48); Decimal = Decimal - int(Decimal); n--; } return temp; } int main() { int i,j; double x; while(cin>>x) { long Integer = long(x); double Decimal = x-Integer; double ans; string Ans = Trans(Integer) + Trans(Decimal); cout<<Ans<<endl; } } 本題AC代碼: [cpp] #include<sstream> #include<stdlib.h> #include<algorithm> #include<iostream> using namespace std; string::iterator it; string Trans(long Integer) { if(Integer == 0) return "0"; string temp=""; while(Integer) { temp = char(Integer%2+48)+temp; Integer/=2; } return temp; } string Trans(double Decimal) { string temp="."; int n = 20; while(Decimal&&n) { Decimal*=2; temp = temp + char(int(Decimal)+48); Decimal = Decimal - int(Decimal); n--; } return temp; } int main() { int i,j; double x; while(cin>>x) { long Integer = long(x); double Decimal = x-Integer; double ans; string Ans = Trans(Integer) + Trans(Decimal); //cout<<Ans<<endl; /*根據題目進行的格式控制、、*/ int n = Ans.length(); while(--n) { it = Ans.end()-1; if(Ans[n] == '0') Ans.erase(it); else if(Ans[n] == '.') { Ans.erase(it); break; } else break; } cout<<Ans<<endl; /* stringstream ss; ss<<Ans; ss>>ans; ss.clear(); cout<<ans<<endl; */ } }