double取整,计算时的精度问题
来源:互联网 发布:qq轻聊版 for windows 编辑:程序博客网 时间:2024/06/07 01:42
这是一题求多点路线问题,每两个点之间都可能存在关系,可以用dfs,不过如果有环的话就会爆栈,也可以有floy直接暴搜。关键在于浮点型计算的时候回丢精度,可以每次都不做浮点型的乘除法,最后在运算。不过这题在取整的时候为啥要减一个精度,还是不太明白。
double类型的精度只能达到小数点后16位,大于16位就不能比较大小了。所以浮点型还是慎用。
代码:
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <string>#include <algorithm>#include <vector>#include <queue>#include <map>#include <set>#define INF 1000000005#define ep 1e-8using namespace std;map<string,int> q;string q2[33];double d[33][33];void floy(int n){ for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(d[i][k]!=INF&&d[k][j]!=INF&&i!=j&&k!=i&&k!=j) { d[i][j]=d[i][k]*d[k][j]; } } } }}void init(){ for(int i=0;i<33;i++) { d[i][i]=1; for(int j=0;j<33;j++) { if(i!=j) d[i][j]=INF; } } q.clear();}int main(){ int n,tt=1; while(scanf("%d",&n)==1) { if(!n) break; init(); int p=0; for(int i=0;i<n;i++) { int a,b; string sa,sb; int ia,ib; char sc[10]; scanf("%d",&a);cin>>sa; if(q.count(sa)==0) { q[sa]=p++; } ia=q[sa]; q2[ia]=sa; scanf("%s",sc); scanf("%d",&b); cin>>sb; if(q.count(sb)==0) { q[sb]=p++; } ib=q[sb]; q2[ib]=sb; d[ia][ib]=(double)b/(double)a; d[ib][ia]=(double)a/(double)b; } double num; string s; scanf("%lf",&num); cin>>s; int id=q[s]; floy(p); double eps=INF; int ansnum; string ansname; for(int i=0;i<p;i++) { if(d[id][i]!=INF&&id!=i) { int tmpnum=(int)ceil(num*d[id][i]-ep);//这里要保留精度取整 if(tmpnum>100000) continue;//这里没看到 double tmpeps=(double)tmpnum*d[i][id]; if(tmpeps<eps) { eps=tmpeps; ansnum=tmpnum; ansname=q2[i]; } } } printf("Case %d: %d ",tt++,ansnum); cout<<ansname<<endl; } return 0;}
- double取整,计算时的精度问题
- double 计算精度的问题
- Java计算double精度问题
- double 的精度问题
- Double的精度问题
- BigDecimal类的加减乘除(解决double计算精度问题)
- Double 类型运算时的精度问题
- Double 类型运算时的精度问题
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- 数值计算精度问题(double,float,Bigdecimal)
- double类型计算精度确实问题
- java中double计算精度问题
- double丢失精度的问题
- Java 中double变量的精度计算
- Java中的Double类型的精度计算
- double类型精度计算
- domino下拉框列表数据使用公式填充的方法
- 简单教你修改magento topLink
- 详谈 Oracle 中的网络配置文件
- C++类的3种继承方式
- STM32这类的芯片设计有多组VSS和VDD原因
- double取整,计算时的精度问题
- SSH 自定义Filter 拦截器
- 中小企业网络管理员实战指南(第2版)PDF完整版全书电子书下载中小企业网络管理员实战指南(第2版)PDF完整版全书电子书下载
- android 自定义View研究(三) — 自定义组合控件
- 2013Q1全球网速排名 韩国第1美国第9 中国呐?(图)
- hibernate关系映射
- 多线程--简单的卖票例子--基础
- HDU 1104 Remainder (BFS)
- Android学习之——图形图像处理(Bitmap、BitmapFactory)(一)