手撕代码速通宝典——3

12. 根据多边形求Π的值

题目描述:
我们可以根据中心点到正多边形顶点的距离r和正多边形的周长L来近似的计算Π,Π=L/(2 * r)。现在给你正多边形的边数(2的正整数次幂),输出对应正多边形计算后的Π值。C++代码,不可使用sin,cos等三角函数。

解题思路

用正多边形逼近法求π的近似值。 用圆内接正多边形的边长和半径之间的关系,不断将边数翻倍并求出边长,重复这一过程,正多边形的边长就逐渐逼近圆的周长,只要圆内接正多边形的边数足够多,就可以求得所需精度的π值。 从正六边形开始。简单起见,设单位圆的半径是1,则单位圆的圆周长是2×π,设单位圆内接正i边形的边长为2b,边数加倍后正2i边形的边长为x,则:
在这里插入图片描述

代码

#include <iostream>
#include <cmath>

using namespace std;

// 计算正多边形的周长
double calculatePerimeter(int n) {
    double sideLength = 2.0; // 初始边长(正方形内接于单位圆)
    for (int i = 4; i <= n; i *= 2) {
        sideLength = sqrt(2 - sqrt(4 - sideLength * sideLength));
    }
    return n * sideLength / 2.0; // 每条边长而非直径划分
}

// 计算Π
double calculatePi(int n) {
    double L = calculatePerimeter(n); // 计算周长
    double r = 1.0; // 半径, 单位圆
    return L / (2.0 * r); // Π = L/(2*r)
}

int main() {
    int N;
    cout << "Enter the number of sides (power of 2, at least 4): ";
    cin >> N;

    // Ensure that N is a power of 2 and at least 4
    if ((N & (N - 1)) != 0 || N < 4) {
        cout << "Error: Number of sides must be a power of 2 and at least 4." << endl;
        return 1;
    }

    double pi = calculatePi(N);
    cout << "Calculated Pi value for polygon with " << N << " sides: " << pi << endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值