回答編集履歴

1

long long としてみた。

2020/05/30 07:37

投稿

pepperleaf
pepperleaf

スコア6385

test CHANGED
@@ -9,3 +9,59 @@
9
9
 
10
10
 
11
11
  オーバーフローと言う事に気付いているならば、途中計算の結果にも注意しましょう。
12
+
13
+
14
+
15
+ --- long long としてみた。[追記]
16
+
17
+ ```C
18
+
19
+ double CountPoints(long long N){ /*格子点の数を計算し円周率を計算する関数*/
20
+
21
+ long long x;
22
+
23
+ long long Cp = 0; /*格子点の数*/
24
+
25
+ double pi; /*円周率*/
26
+
27
+ for(x = 1; x < N; x++){
28
+
29
+ if(N * N - x * x >= 0){ /*円周で囲まれる部分の格子点を全てたす*/
30
+
31
+ Cp += ((long long) sqrt(N * N - x * x));
32
+
33
+ }
34
+
35
+ }
36
+
37
+ Cp = ((long) 4 * Cp + 4 * N + 1); /*他の象限の扇形+軸の格子点+原点*/
38
+
39
+ pi = ((double) Cp / (double) (N * N)); /* 面積/半径の二乗 */
40
+
41
+ return pi;
42
+
43
+ }
44
+
45
+
46
+
47
+ int main(void){
48
+
49
+ int n;
50
+
51
+ double Pi;
52
+
53
+ scanf("%d",&n); /*半径を入力*/
54
+
55
+ Pi = CountPoints(n); /*入力された半径に応じて円周率を計算*/
56
+
57
+ printf("%d:%.15f\n",n,Pi); /*半径と円周率を出力*/
58
+
59
+ return 0;
60
+
61
+ }
62
+
63
+ ```
64
+
65
+ 結果:
66
+
67
+ 300000:3.141592641433333