題目連結:
題目大意:
給定一正整數 x (0 < x < 16),請輸出圓周率(PI)小數點後第 x 位之值。
範例輸入:
範例輸入一:
1
範例輸入二:
2
範例輸入三:
3
範例輸入四:
5
範例輸出:
範例輸出一:
1
範例輸出二:
4
範例輸出三:
1
範例輸出四:
9
解題思維:
圓周率為
3.141592653589793……
如果有背的話,這題是可以直接放進陣列然後輸出對應的值。
但是如果沒有背的話,大部分語言都有自行定義 PI 的值,例如 C++ 的 <cmath> 標頭檔(即 C 的 <math.h>)中的 M_PI 、 Python 的 math.pi 等等。不過 Visual Studio 寫 C++ 要使用 cmath 所定義的常數前,要在 <cmath> 前面加上「#define _USE_MATH_DEFINES」才能使用。
但是除了以上常見的方式以外,還有一個特別的方式可以得知圓周率之值,即 acos(-1)。acos() 代表三角函數 cos() 的反函數,其定義域(輸入)為 [-1, 1]、值域(輸出)為 [0, π]。而 cos(π) = -1 ,因此 acos(-1) = π。
對於 C++ 來說 acos(-1) 只能精確到小數點後 15 位(因為雙精度浮點數(double 型態)的緣故),但是對於本題來說已經夠用了。
題外話:推薦 3Blue1Brown 這個 Youtube 頻道,裡面除了介紹了微積分與線性代數的基本概念以及視覺化,還有著不少的數學科普。有興趣的讀者可以看看。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。