十分简单,别想复杂了!^_^
这道题目,要用的只是点就一个,高精度乘法运算,如果是C++的话,请用分治的方法,而对于java以及python而言,只需要直接调用对于高精度计算的函数即可,此处用了python的pow
计算位数很简单,10^x + k = 2^p -1 -> log10(2^p - k - 1) == x - > int (log10(2) * p) + 1
python代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
import sys
P = int(raw_input())
print int(math.log10(2) * P) + 1
L = pow(2,P) - 1
L = L % pow(10,500)#将数字减少,否则后面的取余运算的时间会增大,导致超时
f = []
for i in range(500):
f.append(L % 10)
L /= 10
for i in range(500 - 1, -1, -1):
sys.stdout.write('%d' % f[i])
if i % 50 == 0:
print ''