给定某数字a(1≤a≤9)以及非负整数n(0≤n≤100000),求数列之和sum=a+aa+aaa+⋯+aa⋯a(n个a)。例如a=2, n=3时,sum=2+22+222=246。
时间: 2023-09-02 18:11:59 浏览: 107
这道题可以用数学公式来求解,也可以用代码来实现。下面我分别介绍两种方法:
方法一:数学公式
我们观察一下题目中的数列,可以发现每一项都是由前一项乘以10再加上a得到的,即:
a + aa = a × 11
a + aa + aaa = a × 111
a + aa + aaa + aaaa = a × 1111
...
a + aa + aaa + ... + aa...a = a × (111...1)(n个1)
所以题目中要求的数列之和可以表示为:
sum = a + aa + aaa + ... + aa...a
= a × (1 + 11 + 111 + ... + 111...1)
= a × [(10^n - 1) / 9] × 11 / 10
其中,(10^n - 1) / 9 表示有n个1的数字,而11/10是因为题目中最后一项是n个a。
下面是 Python 代码实现:
```
def sum_of_series(a, n):
return a * ((10**n - 1) // 9) * 11 // 10
```
方法二:循环求和
我们可以用一个循环来求解题目中的数列之和,具体做法是依次计算每一项的值并累加起来。下面是 Python 代码实现:
```
def sum_of_series(a, n):
s = 0
t = a
for i in range(n):
s += t
t = t * 10 + a
return s
```
这个方法的时间复杂度为 O(n),当 n 较大时,速度会比较慢。因此,我们推荐使用方法一。