本文主要是介绍hdu1408 盐水的故事(数学:高精度),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一道很基础的数学题,考察的就是高精度
在这里要注意输入10 1结果应该为13
但是输入9 1结果就应该为12,因为第4次滴玩3滴就结束了
可以滴水的过程发现是一个递增数列
所以前n项和为sum=n*(n+1)/2
当sum>=val时,说明已滴完,但是可能超出了val
所以要每次减d直到与val近似相等
因为担心除法过程中有精度损失,所以用的val*2.0
最近用纯c刷题好爽啊,写精简的代码特别干净
精度问题的产生就在于读入数据时产生了细微的误差
如输入1.0,读入浮点数很可能存储为1.000001或者0.999999
代码如下:(注意高精度esp的用法)
#include <stdio.h>
#define MAXN 5500
#define esp 1e-8
double v, d, cnt;
int i, ans;
int main(void) {while(scanf("%lf%lf", &v, &d) != EOF) {for(i=1; ; ++i) {cnt = (i*i*1.0+i*1.0)*d;if(cnt - v*2.0 >= -esp) {ans = (i*i+3*i)/2-1;while((cnt-=2.0*d) - v*2.0 >= -esp)ans--;printf("%d\n", ans);break;}}}return 0;
}
这篇关于hdu1408 盐水的故事(数学:高精度)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!