Sum of the factorial of the digits of a number - wierd behaviour
Jon Clements
joncle at googlemail.com
Wed Dec 9 15:21:34 EST 2009
Even though you've worked it out -- a couple of tips:
On Dec 9, 5:39 pm, SiWi <wimmersi... at googlemail.com> wrote:
> On Dec 9, 6:36 pm, SiWi <wimmersi... at googlemail.com> wrote:
>
>
>
> > Dear python community,
> > I've got a wierd problem and I hope you can help me out at it.
> > I wrote the following code to find the Sum of the factorial of the
> > digits of a number (this is for Project Euler 74):
>
> > def fac(n):
> > x=1
> > for i in range(2,n+1):
> > x*=i
> > return x
>
numpy/scipy etc... are quite useful for Euler :)
They contain a function to do factorials (and loads more).
This to one of the readable uses of 'reduce':
def fac(n):
reduce(operator.mul, xrange(2, n+1), n)
> > t=tuple(fac(n) for n in range(1,10))
>
> > def decimals(x):
> > i=1
> > d=[]
> > while x>0:
> > d.append(x%10)
> > x=x/10
> > return d
The builtin str object can take integers and return it as a string.
def decimals(x):
return map(int, str(x))
decimals(145) == [1, 4, 5]
>
> > def sumfac(x):
> > return sum(t[n-1] for n in decimals(x))
>
And join the two:
print sum(fac(n) for n in decimals(145))
> > The problem is that i get the following results, for which I can't see
> > any reason:
> > sumfac(145)->145 (1!+4!+5!=1 + 24 +120 = 145) - ok
> > sumfac(1454)-> 169 - ok
> > sumfac(45362) -> 872 - ok
> > sumfac(363600) -> 727212 - wrong, should be1454
>
> > Greetings,
> > SiWi.
>
> Oops, found it myself. You can ignote the message above.
You might also find it useful to write generators (esp. for primes and
factorials).
Cheers,
Jon.
More information about the Python-list
mailing list