<-- back

n+nn+nnn+...


I came across a programming problem that made me think for a while:
Write a Python program that accepts an integer n and computes the value of n+nn+nnn+...

This is the programming problem that got me thinking for a while one day, and I saw few correct answers on internet in the case where n is greater than 9.

Here is about what I have seen the most as a solution:

(we'll limit ourselves here to n+nn+nnn)


python3 example.py
def func(n):
    k = n
    sum = 0
    for i in range(3): #limit n+nn+nnn
        sum += k
        k = k * 10 + n
    return sum

#Output:
#func(1)  -> 123
#func(2)  -> 246
#func(3)  -> 369
#func(4)  -> 492
#func(5)  -> 615
#func(6)  -> 738
#func(7)  -> 861
#func(8)  -> 984
#func(9)  -> 1107
#func(10) -> 1230

For n = 9, we have 1107 (because 9 + 99 + 999 = 108 + 999),
but for n = 10, we get 1230, or 10 + 1010 + 101010 is much higher, since 1230 < 101010.

The problem here is that we multiply k by 10 and then we add n.

example with n = 9:
9 * 10 = 90
90 + 9 = 99

but for n = 10:
10 * 10 = 100
100 + 10 = 110

However, we're looking for 1010. A solution would be to make a condition like if n > 9, then there we multiply by 100 instead of 10, but it does not look clean.

The solution:


python3 solution.py
def func(n):
    m = []
    k = ''
    for i in range(3):
        k += str(n)
        m.append(int(k))
        sum = 0
        for j in range(len(m)):
            sum = sum + int(m[j])
    return sum

#Output:
#func(10)   -> 102030
#func(20)   -> 204060
#func(100)  -> 100200300
#func(1000) -> 100020003000

Thus, for n = 10, we obtain 102030.