天天下雨! 发表于 2022-3-24 11:57:17

利用以下关系求pai

输入5时结果正确,输入100时结果就变成0.000000,求大佬帮帮忙看看哪里有问题


π/2=(2×2)(4×4)(6×6)…[(2n)×(2n))]/(1×3)(3×5)(5×7)…[(2n−1)×(2n+1)]



注意:
(1)n均为int型,求π时相关变量用double型。程序要避免计算结果溢出。
(2)用printf函数输出时,使用“%7.5f”格式符输出。




____________________________________________________________

#include<stdio.h>

long long intupre(int n)
{
      longlong int sum=((2*n)*(2*n));
      if(n>1)
      {
      sum*=upre(n-1);
      }
      return sum;
}

long long int dnre(int n)
{
      long long int sum=((2*n-1)*(2*n+1));
      if(n>1)
      {
      sum*=dnre(n-1);
      }
      return sum;
}

int main(void)
{
      int n;
      double pai;
    printf("please input...\n");
      scanf("%d",&n);
      
      
      pai=2.0*((double)upre(n))/((double)dnre(n));
      printf("%7.5f\n",pai);
      

      return 0;
}
________________________________________________________________

天天下雨! 发表于 2022-3-24 12:02:26

开始的关系最后应该是(2*n-1)*(2*n+1),打错了不好意思

傻眼貓咪 发表于 2022-3-24 13:10:00

注意你的公式分子,(2×2)(4×4)(6×6)…[(2n)×(2n))]
= 4*16*36......4*n*n
不清楚你的公式是否正确,但问题在于 n = 100 时,早就溢出 long long 了。数值太大了

傻眼貓咪 发表于 2022-3-24 13:46:09

注:数学知识
(a * b) / (c * d) = (a / c) * (b / d)
#include <stdio.h>

double pi(int n){
        if(n == 1) return ((4.*n*n) / ((2.*n-1) * (2.*n+1)));
        return ((4.*n*n) / ((2.*n-1) * (2.*n+1))) * pi(n - 1);
}

int main(void){
        printf("%lf", pi(100)*2);
        return 0;
}

天天下雨! 发表于 2022-3-24 14:26:14

傻眼貓咪 发表于 2022-3-24 13:10
注意你的公式分子,(2×2)(4×4)(6×6)…[(2n)×(2n))]
= 4*16*36......4*n*n
不清楚你的公式是否正确, ...

谢谢啊,公式没问题,但你说的很有道理
顺便问一下,怎么发图片啊,一直让我在相册选图,但什么也没有,可能看图更清晰一些

傻眼貓咪 发表于 2022-3-24 14:28:15

先上传图想发的图,然后点取图片便可

天天下雨! 发表于 2022-3-24 14:34:33

傻眼貓咪 发表于 2022-3-24 14:28
先上传图想发的图,然后点取图片便可

谢谢啊

天天下雨! 发表于 2022-3-24 14:42:10

傻眼貓咪 发表于 2022-3-24 13:46
注:数学知识
(a * b) / (c * d) = (a / c) * (b / d)

我懂你的意思了,非常感谢啊{:9_232:}

傻眼貓咪 发表于 2022-3-24 14:50:25

天天下雨! 发表于 2022-3-24 14:42
我懂你的意思了,非常感谢啊

{:10_254:}
页: [1]
查看完整版本: 利用以下关系求pai