2706:麦森数 百炼oj

来源:互联网 发布:中断控制器编程实验 编辑:程序博客网 时间:2024/05/10 19:57

点击打开链接http://bailian.openjudge.cn/practice/2706/

题目:求麦森数,要去打印有多少位,另外求出后500位,不足500位高位补0。

可将此题目分解为以下几个问题:

一、求出有多少位

分析可知,2的幂次方,结果可为:2,4,6,8,因此可求出2的幂次方有多少位既是2的幂次方减1有多少位,可利用对数恒等式计算,

int(P*log10(2) + 1),注意取整。

二、怎么计算一个数的幂,暂时两种方法?

(1):移位计算,x<<t.将数x左移t位,等于乘以2的t次幂。(像4,8,16等的次幂均可通过移位计算)。

(2):写成一共函数计算,循环多次。

三、保存后面500位的结果。

可以压缩,也可以不压缩,建议压缩。压缩时应该注意int 表示的范围在32767所以每次计算2的14次方,ans数组中每个元素可以保存5位数,因此相邻元素之间的进制变为100000.



原创粉丝点击