2765 :八進位制小數
阿新 • • 發佈:2018-12-11
總時間限制: 1000ms 記憶體限制: 65536kB
描述
八進位制小數可以用十進位制小數精確的表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 (7/8 + 5/64)。所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。
你的任務是寫一個程式,把(0, 1)中的八進位制小數轉化成十進位制小數。 輸入 輸入包括若干八進位制小數,每個小數佔用一行。每個小數的形式是0.d1d2d3 … dk,這裡di是八進位制數0…7,而且已知0 < k < 15。 輸出 對於每個輸入的八進位制小數,輸入如下形式的一行
0.d1d2d3 … dk [8] = 0.D1D2D3 … Dm [10]
這裡左邊是輸入的八進位制小數,右邊是相等的十進位制小數。輸出的小數末尾不能有0,也就是說Dm不等於0。
樣例輸入
0.75 0.0001 0.01234567
樣例輸出
0.75 [8] = 0.953125 [10] 0.0001 [8] = 0.000244140625 [10] 0.01234567 [8] = 0.020408093929290771484375 [10]
程式碼
#include <stdio.h> #include <string.h> int main() { char s[20]; int len; double n; while(scanf("%s",s)!=EOF) { n=0; len=strlen(s); for(int i=len-1;s[i]!='.';i--)//小數點前面的處理 { /** 十進位制小數轉N進位制 小數部分 × n 取整數 ↓排列 **/ //逆方向計算 得出十進位制 n/=double(8.0);//轉化為十進位制 n+=double(s[i]-'0'); } n/=double(8.0);//小數點前那一個還沒處理 printf("%s",s); printf(" [8] = %.45g [10]\n",n);//%g指代浮點數,去掉無意義的零 } return 0; }