`
Abrain
  • 浏览: 7675 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

LightOJ 1282 - Leading and Trailing

阅读更多

题意:求n^k的前三位和后三位。2<=n<2^31,1<=k<=10^7
分析:

  • 后三位。求后三位比较简单,直接二分幂对1000求余即可。
  • 前三位。对于给出的数据来说,不可能直接求,因此可以保留一定的位数以确保精度足够。此题应保留 3+lg(k) 位。然而,对于题给 k 的最大情况,要保留 10 位,如果用64位整数来存的话,中间过程肯定会溢出。想到 double 来保存数据,看来测试数据显然是加强过了的,不会让你轻易过的。
各种WA,各种囧。神奇的是,double 保留 9 位能过,而 long long 保留 9 位 测试样例都过不了。应该是精度的问题。
对于 long long 来说,保留 9 位(也就是进行除法),就是准确的保留 9 位;而对于 double 来说,保留 9 位,相当于小数点整体向左移,并没有将其超过 9 位的部分舍去,而是在小数点右边,进行乘法的时候也就保证了精度。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics