题解 P1249 【最大乘积】

· · 题解

解题思路

其实下面几位都讲得差不多了,不过高精度这种东西还是可以用python水一波的。 简单介绍数学知识。大概就是

让相乘的数的个数尽可能多

所以就可以贪心了。各个数不一样,所以就从2开始加 令tmp=2+3+4+5+6+7+8+...

为什么不选1 :(废话1对乘积没有贡献)

加到第一次大于n为止,然后把(tmp-n)这个数从数列中去掉,OK 剩下就是把这个数 嗯~ o( ̄▽ ̄)o 乘起来。高精度再见QAQ 下面给一下python代码,是不是比C++段很多呢(废话!没有高精度)

n=input()
a=[1 for i in range(1,10004)]
ans=0
out=1
i=2
p=1
while(ans<=n):
    ans=ans+i
    if p<=10000:
        a[p]=i
        p+=1
    i+=1
k=ans-n
for j in range(1,p):
    if a[j]!=k:
        print a[j],
        out*=a[j]
print "\n",out