小數的進位制轉換
阿新 • • 發佈:2018-11-19
八進位制有限小數均可以用十進位制有限小數精確地表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 (7/8 + 5/64)。所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。
你的任務是寫一個程式,把(0,1)之間的八進位制小數轉化成十進位制小數。
Input一行,包含一個八進位制小數。每個小數的形式是0.d1d2d3 ... dk,這裡di是八進位制數0...7,dk不等於0,而且已知0 < k < 15。Output輸入如下形式的一行
這裡左邊是輸入的八進位制小數,右邊是相等的十進位制小數。輸出的小數末尾不能有0,也就是說Dm不等於0。注意空格位置。Sample Input
0.75
Sample Output
0.75 [8] = 0.953125 [10]
:輸入的數,小數後面小於15位,用char型陣列輸入,然後對每一個數進行轉換(轉換的時候用0.125的次方,這樣就算在第十五位小數的時候,也不會爆double),
再相加之後,用printf("%.45g",t)輸出,
printf("%.n g",a)輸出 a 的 前 n 位有效數字。自動去掉末尾的0。
#include <bits/stdc++.h> using namespace std; char s[20]; int main(){ cin>>s; double t; int len = strlen(s),i; for(i = 2; i < len; i++){ int temp = s[i]-'0'; t = t + temp * pow(0.125,i-1); } printf("%s [8] = %.45g [10]",s,t); return 0; }