zoukankan      html  css  js  c++  java
  • PTA 7-15 计算圆周率 (15分)

    根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

    ​​π/2​​ = 1 +1/3​​ + 2!/3*5 + 3!/3*5*7 + ... + n!/3*5*7*...*(2n+1)+....
    

    输入格式:

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

    输出格式:

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

    输入样例:

    0.01
    

    输出样例:

    3.132157
    

    正确的代码样例:

    #include<stdio.h>
    int main()
    {
    	double threshold;//阈值
    	scanf("%lf",&threshold);
    	
    	double sum=1,sum1=1,sum2=1;
    	int i=1,j=1;
    	
    	while(sum1/sum2>=threshold)
    	{
    		if(sum2==1) sum1=1;//第一项为1,跳过分子增加的过程;
    		else
    		{
    			sum1=sum1*(i+1);
    			i++;
    		}
    		sum2=sum2*(j+2);
    		j+=2;
    		sum+=sum1/sum2;
    	}
    	printf("%.6lf",sum*2);
    	return 0;
    }
    

    刚开始做的时候一直错,检查了好几遍算法,就是跟结果差一点,后来发现是得到最终值的方法有问题,测试点也提示:“直接计算n!会超长整型”。

    错误的代码样例:

    #include<stdio.h>
    int main(){
    	float min;
        double num=1,sum=1;
    	int i;
    	scanf("%f",&min);
    	if(min>=1)
    	{
    		printf("2.000000");
    	}
    	else
    	{
    		for(i=1;;i++)
    		{	
    			num*=(1.0*i)/(2*i+1);
    			if(num<min)
    			{
    				break;
    			}
    			sum+=num;
    		}
    		printf("%.6f",sum*2);
    	}
    	return 0;
    }
    
  • 相关阅读:
    爬虫开头
    JAVA练习笔记---copyfile
    String
    十进制转化为八进制--栈实现
    一、给计算机专业的同学,计算机鸡汤
    数值的整数次方
    剪绳子-动态规划-贪婪
    二进制中为1 的数字个数
    机器人运动范围——回溯法应用
    矩阵的路径
  • 原文地址:https://www.cnblogs.com/HBU-xuhaiyang/p/12520631.html
Copyright © 2011-2022 走看看