PTA 实验6-1 近似求PI (15point(s)) Easy only once *关于le的问题和指数输入的问题,没怎么见过

基本思想:

按照公式逐项求和,最后对比给出的误差范围,确定求到第几步,是机试的一个典型题目;

关键点:

卡在了怎么输入指数浮点数的问题上,第一次件scanf("%le")中的le规格;

使用cin>>或者scanf("%le")其实都是可以输入1E-5作为浮点存储;

但是当时看内存踩坑里了,误以为1.000001大于1,其实就是0.000001,只不过是存储方式不同而已;

具体问题比较复杂,涉及到浮点存储,这里不深究,以后有缘再说吧,也算开开眼;

#include<stdlib.h>
#include<stdio.h>

double jc(double x) {
    double sum = x;
    x--;
    while (x > 1) {
        sum *= x;
        x--;
    }
    return sum;
}

double fmcnt(double x) {
    double sum = 1;
    for (int i = 0; i < x; i++) {
        int now = 3 + i * 2;
        sum *= (double)now;
    }
    return sum;
}

void change(double eps) {
    double temp = 1;
    double sum = 0;
    double index = 1;//项的枚举
    //cout << temp - eps << endl;
    while (temp >= eps) {
        sum += temp;
        double fz = jc(index);
        double fm = fmcnt(index);
        temp = fz / fm;
        index++;
        //cout << temp << endl;
    }
    sum += temp;
    printf("PI = %.5lf\n", sum * 2);
}


int main() {
    double eps;
    //cin >> eps;
    scanf("%le", &eps);
    //cout << eps << endl;
    //eps -= 1;
    //cout << jc(4) << endl;
    change(eps);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12360691.html
今日推荐