Uva--375 (几何,精度处理)

2014-06-12 23:14:36

题意&思路:在等腰三角形内由底向上,堆叠内切圆,算出总周长。(TAT精度判断方法是测样子强行测出来的,谁会想到判断要在while里面,遇到r < 0.000001的就不算!另外printf(%13.6lf\n") 这里里面13表示数值总长(包括小数点),6表示小数点后位数)
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
const double INF_MIN = 0.000001;
const double PI = acos(-1.0);

int main(){
    double B,H,r,Rsum;
    int t;
    scanf("%d",&t);
    while(t--){
        Rsum = 0;
        scanf("%lf %lf",&B,&H);
        while(1){
            r = B * H / (B + sqrt(B * B + 4 * H * H));
            if(r < INF_MIN)
                break;
            Rsum += r;
            B = B * (H - r - r) / H;
            H -= (r + r);
        }
        printf("%13.6lf\n",2.0 * PI * Rsum);
        if(t)
            puts("");
    }
    return 0;
}

 

posted @ 2014-06-12 23:16  Naturain  阅读(115)  评论(0编辑  收藏  举报