7-15 计算圆周率

学到翁恺老师《C语言程序设计》第八周了,来PTA做点习题练习

题目是:
用圆周率的关系式,求圆周率的值,直到最后一项的值小于给定阈值。
​2​​π​​=1+​3​​1​​+​3×5​​2!​​+​3×5×7​​3!​​+⋯+​3×5×7×⋯×(2n+1)​​n!​​+⋯

输入格式
输入在一行中给出小于1的阈值。

输出格式
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

一开始写出来的代码是这样的:(c语言)

#include "stdio.h"

int main(){

    double e;
    int i=1;
    double temp=0;
    double x=1;
    double y=1;
    double sum=1;
    double pai=0;
    scanf("%lf",e);
    while(e<1.0){
        for(i=1;temp<e;i++){
            x*=i;
            y*=(2*i+1);
            temp=x/y;
            sum+=temp;
        }
    }
    pai=2*sum;
    printf("%.6f",pai);
    return 0;
}

emmmm但是写出来代码超时,怎么修改呢?

考虑到每次while都要走一次循环,时间复杂度较高,就删去了,果然运行没有超时。

#include "stdio.h"

int main(){
    double x=1, y=1,sum=1,pai=0,i;
    double e=0;
    scanf("%lf",&e);
    for(i=1;x/y>=e;i++){
            x*=i;
            y=y*(2*i+1);
            sum+=x/y;
        } 
    pai=2*sum;
    printf("%.6f\n",pai);
    return 0;
}

gcc一直提示“‘%lf’ expects argument of type ‘double *’, but argument 2 has type ‘double’”,结果发现原来是scanf("%lf",&e)忘记加&符号了。

运行通过~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值