书上具体所有题目:http://pan.baidu.com/s/1hssH0KO

题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers

代码:

//UVa11809 - Floating-Point Numbers
#include<iostream>
#include<sstream>
#include<cmath>
long long E[12][33], e;
double M[12][33], m, re;
char str[25], *ps;
int main()
{
for (int i = 0;i <= 9;++i)//M
for (int j = 1;j <= 30;++j) {//E
m = 1 - pow(2, -1 - i);
e = pow(2, j) - 1;
re = log10(m) + log10(2)*e;
E[i][j] = (long long)re;
M[i][j] = pow(10, (re - E[i][j]));
}//打表完成,读入数据
while ((std::cin >> str) && (ps = str) != "0e0") {
while (*++ps != 'e');*ps = ' ';
std::istringstream s(str);
s >> m >> e;
for (int i = 0;i <= 9;++i) {//M
int j;
for (j = 1;j <= 30;++j) {//E
if (E[i][j] == e && (M[i][j] - m < 0.0001 && m - M[i][j] < 0.0001)) {//double达不到15位的精度,但是其实无所谓,差不离就行
std::cout << i << ' ' << j << '\n';
break;
}
}
if (j <= 30) break;
}
}
return 0;
}

分析:这题对我来说有点难,而且一开始做这题时精神状态不佳,磨洋工磨了一下午也没磨出来。甚至一开始看懂了题目但看不懂题意。。然后第二天继续做,在继承了昨天磨了一下午形成的固化思维下,有点思路但是感觉写下来会很烦琐。于是认认真真去网上看大神的思路。又不敢看太多,看太多了就没有自己的思路了完全是抄了,抄完该忘记的还是忘记。

这题主要看了这位大神的博客:http://blog.csdn.net/crazysillynerd/article/details/43339157

首先他是用的打表。这个方法我知道但一直没想到去用过。而这题刚好说了“The input file contains around 300 line of input”,同时有 9 ≥ M ≥ 0 and 30 ≥ E ≥ 1,10*30刚好300,用读表法再好不过。所以这也是我第一次用读表法。。下次就记住了。

然后怎么打表,我又不会了。。真的菜。。主要就是在两个循环里如何计算M和E。看到这位大大用了log什么的看了几眼没看懂,觉得还是自己动手算比较好,于是拿出草稿纸。事实证明草稿纸果真神器一枚,理思路、演算很有帮助。

我们要做的转化是:M x 10^E=m x 2^e(这个e与2.7的那个e无关),m和e可以根据i、j求出,也就是看成常数。那么两边取log10,得lg M + E x lg 2=lg M + e,左式可算出为re,右式E为long long,M为double,且因为使用的科学记数法,1<=M<10(虽然题目上只说0 < M < 10,但这位大神还去测了,题目中给的数据都是大于1的,钻研精神max),所以0 < lg M < 1,所以E = re - lg M,E为re的取整,即强制转化为long long即可,然后M也可求出。。天,这方法比我之前想的不知道快到哪里去了。。。

然后就是根据输入的数据读表,没什么问题。但是注意到那大神用了istringstream。这玩意我在C++Primer上看到过,当时还想着没什么用。现在才知道其威力!当我看到大神那句:

for(string::iterator i = in.begin(); i != in.end(); ++i) if(*i == 'e') *i = ' '; 

瞬间让字符串可以直接输入到double和long long,简化了不少的代码!我做题目至今,用来用去就那几个东西,primer上看到的那些东西都没怎么用过。论活学活用的重要性。。。

于是最终。。我写出来的代码还是和那大神的还是太像了。。。跟抄作业的一样。。

[刷题]算法竞赛入门经典 3-12/UVa11809的更多相关文章

  1. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

  2. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  3. [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...

  4. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

  5. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  6. [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

    题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...

  7. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A

    题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...

  8. [刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa12108 - Extraordinarily Tired Stude ...

  9. [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...

随机推荐

  1. 浅谈MVC缓存

    缓存是将信息放在内存中以避免频繁访问数据库从数据库中提取数据,在系统优化过程中,缓存是比较普遍的优化做法和见效比较快的做法. 对于MVC有Control缓存和Action缓存. 一.Control缓存 ...

  2. vuejs模板使用方法

    vuejs的模板功能很强大,下面是一些demo <!DOCTYPE html> <html lang="en"> <head> <meta ...

  3. poptest老李谈分布式与集群 1

    poptest老李谈分布式与集群   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...

  4. 老李分享:导出xml报告到手机

    老李分享:导出xml报告到手机   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...

  5. 转接口IC GM7150BN/ GM7150BC:CVBS转BT656芯片 低功耗NTSC/PAL 视频解码器

    1 概述    GM7150 是一款9 位视频输入预处理芯片,该芯片采用CMOS 工艺,通过I2C 总线与PC 或DSP 相连构成应用系统.    它内部包含1 个模拟处理通道,能实现CVBS.S-V ...

  6. mock.js-无需等待,随机产生数据,让前端独立于后端进行开发

    mock.js所做的 基于 数据模板 生成模拟数据. 基于 HTML模板 生成模拟数据. 拦截并模拟 ajax 请求. Mock.js官方网址:http://mockjs.com/ 1.Mock.js ...

  7. How To Use ggplot2

    0. Preparation and Introduction ggplot2是R中新颖的数据可视化包,这得益于Leland Wilkinson在他的著作<The Grammar of Grap ...

  8. 学Java,是自学还是去培训班学习?

    现在正在读在校的最后一个学年,想毕业后从事编程,但是感觉自己技术太差,应该是培训呢?还是去找实习?亦或是有更好的途径? 对于 Android 目前的行业趋势,不知道自己该不该坚持?还是转其他行业? 已 ...

  9. 关于sql、mysql语句的模糊查询分类与详解,包括基本用法和mapper.xml文件里插入写法

    欢迎猿类加qq:2318645572,共同学习进步 实际例子: ssm框架:service业务层->dao层->mappers.xml->junit/test测试 1:service ...

  10. 仿QQ空间动态界面分享

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...