你比祖冲之厉害

题目描述

祖冲之是世界上第一位将圆周率准确地推算到小数点后七位数值的科学家,并将这一纪录在世界上保持了一千年之久。 祖冲之按照刘徽的割圆术之法,设了一个直径为一丈的圆,在圆内切割计算。当他切割到圆的内接一百九十二边形时,得到了“徽率”的数值。但他没有满足,继续切割,作了三百八十四边形、七百六十八边形……一直切割到二万四千五百七十六边形,依次求出每个内接正多边形的边长。最后求得直径为一丈的圆,它的圆周长度在三丈一尺四寸一分五厘九毫二秒七忽到三丈一尺四寸一分五厘九毫二秒六忽之间,上面的那些长度单位我们现在已不再通用,但换句话说:如果圆的直径为1,那么圆周小于3.1415927、大 大不到千万分之一,它们的提出,大大方便了计算和实际应用。 现在你有了计算机了,你是不是可以比祖冲之更厉害?你能求出圆周率吗? 现在我们可以利用公式pai/4=1-1/3+1/5-1/7+...求pai的近似值,直到某一项的绝对值小于某个数f为止,我们可以通过控制f的大小来提高pai的精确性

 

输入

有多组测试数据,每组测试数据一行。 该行输入一个小数f(小数点后最多4位).

输出

输出利用pai/4=1-1/3+1/5-1/7+...公式直到最后一项的绝对值小于f为止后求出的pai值(保留4位小数)

样例输入

2
1
0.34

样例输出

4.0000
2.6667
2.6667
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(){
	int i=0;
	float f,item,a,sum=1;
	while(scanf("%f",&f)!=EOF){
		a=i+1;
		item=1.0/a*pow(-1,i+2);
		while(fabs(item)>=f){
			a=i+1;
			if(i%4!=0){
				item=1.0/a*(-1);
			}
			else{
				item=1.0/a;
			}
			if(i==0){
				sum=sum-1;
			}
			sum=sum+item;
			i=i+2;
		}
		printf("%.4f\n",4*sum);
		sum=1;
		i=0;
	} 
	
	return 0;
} 

这一题搞了一天才出来。

有两个重要的原因。

其中一个是浮点数的绝对值是用fabs,而不是用abs。

另外一点则是while循环里面的各种范围和限定,搞得头大,所以又去学了一下如何进行调试,通过调试功能,终于把这题给解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值