我得到了错误的答案:
long(math.factorial(100)) % long(math.pow(12, 48))
答案应为0,但Python给出:
3533293188234793495632656292699172292923858530336768L
答案 0 :(得分:8)
您正在假设不支持的浮点转换。浮点数是近似值,使用二进制分数,精度有限。
你在这里创建了一个非常大的数字:
>>> math.pow(12, 48)
6.319748715279271e+51
这是一个52位的数字,但浮点数不能精确地模拟所有这些数字。将该数字转换为整数将导致不精确的结果:
>>> long(math.pow(12, 48)) - (12 ** 48)
351985927636009487190448992086392832L
这是36个不精确的数字。
答案是不使用math.pow()
;在整数上使用**
指数运算符:
>>> math.factorial(100) % (12 ** 48)
0L