1. 程式人生 > >用割圓術求圓周率π

用割圓術求圓周率π

圓周率π的遞推公式如下:

     以半徑為1的圓開始,依次在圓內畫正六邊形、正十二邊形、正6n邊形...

     只有n趨近於無窮大,便可以得到足夠接近圓的正多邊形,計算的圓周率π也就越精確。

完整程式碼如下:

package cn.whut.num;
import java.util.Scanner;


public class pai {
	static void cyclotomic(int n)			//割圓術演算法
	{
		int i,s;
		double k,len;
		i=0;
		k=3.0;					//初值
		len=1.0;					//邊長初值
		s=6;						//初始內接正6邊形

		while(i<=n)
	    {
	        System.out.printf("第%2d次切割,為正%5d邊形,PI=%.24f\n",i,s,k*Math.sqrt(len));
	        s*=2;					//邊數加倍 
	        len=2-Math.sqrt(4-len); 		//內接多邊形的邊長 
	        i++;
	        k*=2.0;        
	    } 
	}
	public static void main(String[] args) {
		int n;
	    System.out.print("輸入切割次數:");
	    Scanner input=new Scanner(System.in);
	    n=input.nextInt(); 			//輸入切割次數
		cyclotomic(n);				//計算每次切割的圓周率

	}

}

效果如下:

相關推薦

圓周率π

圓周率π的遞推公式如下:      以半徑為1的圓開始,依次在圓內畫正六邊形、正十二邊形、正6n邊形...。      只有n趨近於無窮大,便可以得到足夠接近圓的正多邊形,計算的圓周率π也就越精確。 完整程式碼如下: package cn.whut.num; impor

Java資料結構:Π

利用割圓術,將一個圓分割成正多邊形,在利用多邊形邊長=圓周,求Π import java.util.*; public class 割圓術求Π { public static void main(String[] args) { int n; System.

計算π

在中國古代,魏晉時期的數學家劉徽於公元263年就提出了“割圓術”的方法,來計算圓的周長,進而可以計算出圓周率。其實,割圓術的原理並不複雜,它通過圓內接正多邊形細割圓周,從而使正多邊形的周長無限接近圓周長,進而來求得較為精確的圓周率。割圓術從圓內接六邊形出發,每一次倍增多邊形的

Java 球π

使用割圓術求圓周率: package qiuΠ; import java.util.Scanner; public class geyuanshu { //n為切割次數 static voi

python圓周率π

今天網上搜索無限不迴圈小數的時候看到了關於π的計算方法,於是用python寫了一個求π的小程式。 原理:π的無窮級數展開: π=4*(1/1-1/3+1/5-1/7+1/9-1/11+……)=4*∑((-1)^n/(1+2n)),n∈N 下面附上程式碼: pi=0.0 fuhao=1

相交面積 hdu5120

-c ace pes eno script inpu common area time 轉載 兩圓相交分如下集中情況:相離、相切、相交、包含。 設兩圓圓心分別是O1和O2,半徑分別是r1和r2,設d為兩圓心距離。又因為兩圓有大有小,我們設較小的圓是O1。 相離相切的面積

圖 實驗七 采Dijkstra算法帶權有向圖的最短路徑

圖解 初始 -s 由於 mic spa 初始化 mil dijkstra Dijkstra算法圖解 說明:初始化:S = { 0 }, U = { 1, 2, 3, 4, 5, 6 }, dist[ ] = { 0, 4, 6, 6, ∞, &in

for循環1-100的所有數的和

1-1 else .com 列表 字符串 div 圖片 步長 一個 2、求1-100的所有數的和 x=0for y in range (1,101): x=x+yprint(x)#Python for循環中可以循環一個列表或者某一個字符串下面是for的基本格式,英文

c++作業實驗10第4章課後習題11遞歸(遞歸方法f())

ace 循環 中間變量 urn 裏的 調用 為什麽 區塊 不知道 // 實驗10第4章課後習題11遞歸.cpp: 定義控制臺應用程序的入口點。 #include "stdafx.h" using namespace std; #include<iostream>

HDU 1077 Catching Fish(單位盡可能圍住多的點)

bits fine cau ron esc rds cas nts blank 傳送門:http://acm.hdu.edu.cn/showproblem.php?pid=1077 Catching Fish Time Limit: 10000/5000 MS (Java/

[C++]三種方法最大子段和

規劃 amp pan 分治 一位 max 組成 所有 ret 問題描述:給定n個整數組成的序列,求其中子段和的最大值。當所有整數均為非負整數時定義其最大子段和為0 方法一:O(n2)用一個值存儲最大和,用枚舉所有和的方法,來與這個值比較並更新最大值。 1 int

怎樣SQL遞迴各個Folder的檔案數

-- 資料準備 CREATE TABLE [dbo].[ContentObject] (Id NCHAR(10), Name NVARCHAR(500),ParentId NCHAR(10),Type NVARCHAR(50)); INSERT INTO [dbo].[ContentObject]

蒙特卡洛法圓周率100億資料

程式碼 import time import random hits=0 pi=0 DARTS=100000*100000 start=time.perf_counter() for i in range(DARTS): x,y=random.random(),random.

python實現斐波那契數列 遞迴實現第N個菲波那切數列

斐波那契數列即著名的兔子數列:1、1、2、3、5、8、13、21、34、…… 數列特點:該數列從第三項開始,每個數的值為其前兩個數之和,用python實現起來很簡單: a=0 b=1 while b < 1000: print(b) a, b = b, a+b

遞迴方法n的階乘

程式碼: #include<iostream> using namespace std; int fact(int n); int main() { int n; loop: cin >> n; cout << fact(n);

遞歸方法n的階乘

sin n的階乘 cout pan out col ostream nbsp int 代碼: #include<iostream> using namespace std; int fact(int n); int main() { int n;

問題與費馬小定理)牛客多校8 G題

連結:https://www.nowcoder.com/acm/contest/146/G 來源:牛客網   時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 131072K,其他語言262144K 64bit IO Format: %lld 題目描述 Niuni

C語言 遞迴法n的階乘

#include<stdio.h> int main() {int njc(int n); int x,n,y; scanf("%d",&n); y=njc(n); printf("%d",y); return 0; } int njc(int n

C++圓周率

//計算圓周率的近似值精確到0.000001為止。運用pi/4=1-1/3+1/5-1/7+…… #include<iostream> #include<cmath> using namespace std; int main() {