Chinaunix首页 | 论坛 | 博客
  • 博客访问: 472135
  • 博文数量: 117
  • 博客积分: 3195
  • 博客等级: 中校
  • 技术积分: 1156
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-04 01:44
文章分类

全部博文(117)

文章存档

2012年(5)

2011年(5)

2010年(46)

2009年(61)

我的朋友

分类:

2010-02-17 00:35:17

 
此题我无语了,本来还以为要高精度+贪心大干一场,结果discuss里都说一句话搞定。
此时此刻才体会到double的强大。
 
复习下基础知识:
type name   |   bytes  |    range of values
-------------------------------------------
float       |     4    |  3.4E +/-38(7 digits)
double      |     8    |  1.7E +/-308(15 digits)
long double |     same as double
 
还有个小地方老是搞混,现在深刻得记一下:
double d;
scanf("%lf", &d);  
printf("%f", d);   
 
因为:
   printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。

  对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

阅读(2298) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-03-01 12:41:28

其实这题是需要高精度的~只是数据比较弱~就过了~