这题有毒吧
⌊ei⌋=⌊(e×10w)i10w⌋
然后只要
e
的精度足够高 就可以当做整数类欧求 这里
from decimal import *
import math
def calc(a,b,n):
ans=0
flag=1
while a!=0 and b!=0:
#print(a,b)
sum=(a//b)*n*(n+1)//2
a%=b
if a==0 or b==0:
if flag==1:
ans+=sum
else:
ans-=sum
break
else:
t=a*n//b
if flag==1:
ans+=sum+n*t+n//b
else:
ans-=sum+n*t+n//b
n=t
t=b;b=a;a=t
flag=-flag
return ans
getcontext().prec = 8010
e=Decimal(0)
i=0
fact=Decimal(1)
while i<=2700:
e+=fact
i+=1
fact=fact/i
pw=1
for i in range(8005):
e=e*10
pw=pw*10
e=int(e)
#print(e)
n=int(input())
#n=1;
#for i in range(2000):
# n=n*10
#print(calc(e,pw,n)%10000000000)
print(calc(e,pw,n))
本来还有个在这里看来的实数类欧做法 现在这个问题因为违规被锁了 不过实数太慢了 T了 只有50
from decimal import *
import math
getcontext().prec = 1000
a=Decimal(1).exp()
n=int(input())
sum=0
sign=1
while n>0:
#print(n,a)
if a>2 :
m=int(math.floor(a-1))
sum=sum+sign*m*n*(n+1)//2
a=a-m
else:
n=int(math.floor(a*n))
sum=sum+sign*n*(n+1)//2
sign=-sign
a=a/(a-1)
n=int(math.floor((n+1)/a))
print(sum)