石家庄网站建设企业,如何进行网站运营与规划,网站建设和钱,优化大师win10根据下面关系式#xff0c;求圆周率的值#xff0c;直到最后一项的值小于给定阈值。 输入格式#xff1a; 输入在一行中给出小于1的阈值。
输出格式#xff1a; 在一行中输出满足阈值条件的近似圆周率#xff0c;输出到小数点后6位。
输入样例#xff1a;
0.01结尾无…根据下面关系式求圆周率的值直到最后一项的值小于给定阈值。 输入格式 输入在一行中给出小于1的阈值。
输出格式 在一行中输出满足阈值条件的近似圆周率输出到小数点后6位。
输入样例
0.01结尾无空行 输出样例
3.132157第一次写的代码可以运行但是无法通过提示直接计算阶乘会超出长整型
#include stdio.h
int funup(int n);
int fundown(int n);
int main ()
{int i 0;double prn;double result 0,iteam 1;scanf(%lf,prn);while(iteamprn){iteam 1.0*funup(i)/fundown(i);result iteam;i;}printf(%f,2*result);return 0;
}
int funup(int n)
{int result 1;if(n 0){result 1;}else{for(int i 1;in;i){result * i;}}return result;
}
int fundown(int n)
{int result 1;for(int i 0;in;i){result * (2*i1);}return result;
}后来参考了别人的代码写的就通过了
#include stdio.hint main()
{double up 1,down 1,item 1,t 0,sum 1;int i 1;scanf(%lf,t);do{up * i;down * (2*i1);item 1.0*up/down;sum item;i;}while(itemt);printf(%f,sum*2);return 0;
}有点不明白为什么第一次单独计算分子的阶乘就说超出范围了第二次“up * i;”不也是算出来阶乘吗
还有用递归的方法更巧妙了
#includebits/stdc.h
using namespace std;
double getnum(int x){if(x 1) return 1;else return getnum(x - 1) * x;
}
double getnnum(int x){if(x 1) return 1; else return getnnum(x - 1) * (2 * x - 1);
}
int main(){double pi 1, n 1, m, up 1, down 1;cin m;while(up / down m){up getnum(n);down getnnum(n 1);pi up / down;n;}printf(%.6lf, (double)pi * 2);return 0;
}
代码内容参考了这两篇文章 https://blog.csdn.net/weixin_45031646/article/details/90147530 https://blog.csdn.net/qiguanjiezl/article/details/102737041