基本思想:
按照公式逐项求和,最后对比给出的误差范围,确定求到第几步,是机试的一个典型题目;
关键点:
卡在了怎么输入指数浮点数的问题上,第一次件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; }
PTA 实验6-1 近似求PI (15point(s)) Easy only once *关于le的问题和指数输入的问题,没怎么见过
原文:https://www.cnblogs.com/songlinxuan/p/12360691.html