哈理工oj 1266 斐波那契数列

斐波那契数列
Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 1448(401 users)Total Accepted: 414(337 users)Rating: Special Judge: No
Description

定义:后一个数等于前两个数之和的数列。

要求:已知出三个正整数n、m、k(0<=n、m<=10,1<=k<=89),计算出以n、m开头的斐波那契数列中第k个数的大小。



Input

输入包含多组测试用例。

每组测试用例要求输入三个整数n、m、k。



Output
对于每组测试用例,输出一个整数作为结果。

Sample Input
0 1 2

Sample Output
1

Source
2012 Winter Holiday Contest 4 - Water Battle
Author
卢俊达

这道题很明显是道基础题,只要把存储的数组的数据类型变为 unsigned long long,就行了,但是为什么不能改为double呢,这就是我写这篇博客的原因,因为数据过大,如果用double的话,那么必然会导致精度缺失,为什么呢,原因如下:

1,因为double类型是浮点数,这种类型可以用科学记数法表示,所以表示范围非常大。
但是,使用可浮点数的代价就是损失了精度。它把这部分精度用于指数的表示。
所以double类型的优点就是数据范围大,缺点是精度不足,大概只有15~16位有效位数。

2,它表示大数的代价就是损失了精度。举个例子:假设我有0-9这10个数,我定义数n表示5n,那么这10个数最大能表示5*9=45。
能表示的范围是:0、5、10、15、20、25、30、35、40、45。最小值为0,最大值为45。所以表示的范围是:0~45。
但1、2、3、4,......,41,42,43,44这些不是5的倍数的数就没法精确表示了,只能在定义中把它们靠向0、5、......、40或者45。
这就是为了扩大表示范围而损失了表示精度。

Oracle NUMBER类型的最大字符个数是38
所以,Oracle NUMBER能表示的最大整数为:a = 99999999999999999999999999999999999999(38个9)
如果转换成DOUBLE,会丢失精度,用DOUBLE存储以后,实际的结果为:b = 1E38 即 10^38 = 100000000000000000000000000000000000000

显然:a ≈ b
但b不是我们期待的值,除非实际应用场景能够认可。
所有Oracle NUMBER不能简单的转为DOUBLE存储,会丢失精度。

转自:

http://m.blog.csdn.net/sunny05296/article/details/69337705




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值