poj 百練 2765 八進位制小數(精度問題)

2021-09-06 23:29:01 字數 1290 閱讀 3850

總時間限制: 

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]

提示假設你使用字串讀取八進位制小數,你能夠使用例如以下的形式中止輸入

char octal[100];

while(cin >> octal)

這道題應該屬於基礎題了,剛開始看到這到題的時候,以為是高精度的題,開始都不敢用double來做,後來看到那個那個8進製數的範圍才15,所以想到double也應該能夠做吧,參考了一下別人的思路,好巧妙啊,直接通過字串倒序處理,把8進製小數轉化為十進位制的整數,值得學習啊~

以下是**。好簡短的,主要是要掌握這樣的思路,這樣的巧妙的寫法;

和曾經我們普通的求法不一樣;

0.75(8)=5/64+7/8;

#include #include int main()

n/=double(8.0);//小數點前那乙個還沒處理

printf("%s",s);

printf(" [8] = %.45g [10]\n",n);//%g指代浮點數,去掉無意義的零

}return 0;

}

百練 2765八進位制小數

總時間限制 1000ms 記憶體限制 65536kb 描述八進位制有限小數均可以用十進位制有限小數精確地表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 7 8 5 64 所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。你的任務是寫乙個程式,把...

百練 2765 八進位制小數

描述 八進位制有限小數均可以用十進位制有限小數精確地表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 7 8 5 64 所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。你的任務是寫乙個程式,把 0,1 之間的八進位制小數轉化成十進位制小數。輸入...

百練2765八進位制小數題解

總時間限制 1000ms 記憶體限制 65536kb 描述 八進位制有限小數均可以用十進位制有限小數精確地表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 7 8 5 64 所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。你的任務是寫乙個程式,...