(考前复习!)7-15 计算圆周率 (15分)

在这里插入图片描述
最开始的代码,但是一直都错

#include <stdio.h>

double getJc(double a);
int getFm(int a);
int main(){
  double threshold;
  scanf("%lf",&threshold);
  double pi=0;
  double i=0;
  double a = getJc(i)*1.0/getFm((int)i);
  while(a>=threshold){
    pi += a;
    i++;
    a = getJc(i)*1.0/getFm((int)i);
  }
  printf("%.6f",pi*2);
}
double getJc(double a){
  double i;
  double count=0;
  if(a==0){
  	return 1;
  }
  for(i=1;i<=a;i=i+1){
  	count *= i;
  }
  return count;
}
int getFm(int a){
  int i,count=0;
  for(i=0;i<=a;i++){
    count *= 2*a+1;
  }
  return count;
}

看了大佬们的代码后,就像这种 不要单独去写一个球阶乘一个球分母的函数了,很有可能数字大了阶乘超过long int 的范围了 ,但是double的范围很大,用double,而且double类型最好这样写!!! 不要去建一个double类型的函数来求阶乘!

#include<stdio.h>
int main()
{
    double i,j,k;
		double sum=1;
		double n;
		scanf("%lf",&n);
		i=2;j=3;
		double i1=1;
		double j1=1;
		while(i1/j1>=n)
		{
				if(j1==1)
					i1=1;
				else
						{
							i1=i1*i;//1*2;  1*2*3;
          		i=i+1;
						}
					//1*2;   1*2*3;
				j1=j1*j;
				j=j+2;
				sum=sum+i1/j1;
				//printf("%f",sum);
		}
		printf("%.6f",sum*2);
		return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值