为给定的整数生成x + xx + xxx + xxxx ...(对于4 - > 4 + 44 + 444 ......)

时间:2016-01-01 21:00:28

标签: python

我必须在每次迭代时逐步连接给定的数字,以便它返回一个sum和连接的字符串。这是我的尝试:

def digit_sum_from_letters(x):
    a = int("%s" % x)
    b = int("%s%s" % (x,x))
    c = int("%s%s%s" % (x,x,x))
    d = int("%s%s%s%s" % (x,x,x,x))
    return a+b+c+d
print digit_sum_from_letters(9) 

返回11106

但是我需要为任何给定的整数生成总和,所以我需要一个循环,但是我被卡住了。

谢谢!

8 个答案:

答案 0 :(得分:5)

鉴于digitn(例如,digit=4n=34 + 44 + 444),您只需生成一系列1,并将其乘以总和digit

digit = 4
n = 3
# 1, 11, 111
ones = [ int("1" * i) for i in range(1, n+1)]
# 4 + 44 + 444 = 4 * (1 + 11 + 111)
answer = digit * sum(ones)

答案 1 :(得分:4)

这应该有效:

>>> def digit_sum(x):
    lst = [str(x)*i for i in range(1,x+1)]
    print '+'.join(lst)
    return sum(map(int, lst))

>>> digit_sum(7)
7+77+777+7777+77777+777777+7777777
8641969
>>> digit_sum(9)
9+99+999+9999+99999+999999+9999999+99999999+999999999
1111111101
>>> digit_sum(3)
3+33+333
369

答案 2 :(得分:2)

有几种方法可以做到这一点。我将从与您最相似的解决方案开始,如果您愿意,我可以采用更快的方式:)。

def digit_sum_from_letters(digit,count):
 suma=0
 cur=digit
 for _ in xrange(count):
  suma+=int(cur)
  cur+=digit
 return suma

答案 3 :(得分:2)

只是为了好玩:

def f(n):
    return n*int("123456789"[:n])

它给出了:

1 -> 1
2 -> 24
3 -> 369
4 -> 4936
5 -> 61725
6 -> 740736
7 -> 8641969
8 -> 98765424
9 -> 1111111101

答案 4 :(得分:2)

谁告诉你你需要一个循环?不要听他们说

def fn(n):
  x,z = n,10
  return x*(z*(z**n-1) // (z-1) - n) // (z-1)

print(fn(1)) # 1
print(fn(2)) # 24
print(fn(3)) # 369
print(fn(4)) # 4936
编辑:很遗憾,他们也要求你使用表达式字符串。在那一部分,你必须遗憾地使用一个循环

答案 5 :(得分:1)

以下函数将执行,n是您的数字(4)m是迭代次数(4,44,444,4444,...)。

def digit_sum_from_letters(n, m):
    sum = 0
    # this is the multiplier.
    # throughout the iterations it will be 1, 11, 111, 1111 ...
    currMult = 1
    for i in range(0,m):
        sum += n*currMult
        currMult = currMult*10 + 1
    return sum

示例运行:

>>> sumLetters(9,4 )
11106
>>> 

答案 6 :(得分:1)

def sum_n(x, n):
    s = 0
    for i in range(1,n+1):
        s += int(('%d'*i) % tuple([x]*i))
    return s


In [0]: print(sum_n(9,4))
Out[0]: 11106

答案 7 :(得分:1)

您可以使用列表压缩来完成:

x = 9
c = 4
sum([int(str(x) * i) for i in xrange(1,c + 1)])
11106