Python 求字符串前n项和(a+aa+aaa+aaaa+...+aaa...aaa)

编写函数,计算形式如a+aa+aaa+aaaa+…+aaa…aaa的表达式前n项的值,其中a为小于10的自然数

def demo1(a,n):
    assert type(a) == int and 0<=a<10, 'a must be integer between 1 and 9'
    a = str(a)
    return sum(eval(a*i)for i in range(1,n+1))

def demo2(a,n):
    a = str(a)
    return sum(map(lambda i :eval(a*i),range(1,n+1)))

print(demo1(1,3))
print(demo2(5,4))

这个函数接受两个参数:a表示表达式中的小于10的自然数,n表示要计算的表达式前n项的和。函数的实现思路如下:

  1. 首先,我们初始化三个变量:result、current_term和current_sum。其中,result表示表达式前n项的和,current_term表示当前项的值,current_sum表示当前项之前的所有项的和。
  2. 然后,我们使用一个循环来计算表达式前n项的和。循环从2开始,因为第1项就是a本身。
  3. 在循环中,我们首先计算当前项的值,然后将其加入到当前项之前的所有项的和中。
  4. 循环结束后,我们将当前项之前的所有项的和作为结果返回。

数字方式

要用数字的方式计算形式如a+aa+aaa+aaaa+…+aaa…aaa的表达式前n项的值,可以使用数学公式进行计算。

  • 首先,可以将每一项写成a * (10^n-1)/(10-1),其中n为当前项数。这个公式的分母为9,可以直接用9进行计算。
  • 然后,将每一项的值相加即可得到所求的结果。

代码如下:

def demo3(a,n):
    sum = 0
    for i in range(1, n+1):
        sum += a * (10**i - 1) // (10-1)
    return sum

print(demo3(1,3))

需要注意的是,这种方法的时间复杂度为O(n),但是由于使用了数学公式,所以计算速度较快。此外,这种方法的代码也比较简洁,易于理解和维护。因此,在实际应用中,可以优先考虑使用数学公式进行计算。

字符串方式

要用字符串方式计算形式如a+aa+aaa+aaaa+…+aaa…aaa的表达式前n项的值,可以将每一项转换成字符串,然后进行字符串拼接。

  • 首先,需要输入a和n的值,其中a为小于10的自然数,n为相加项数。
  • 使用一个字符串变量s来保存当前项的值,并在循环中对s进行更新,从a到aa到aaa等.
  • 然后,将每一项的字符串转换成整数,并相加即可得到所求的结果。

代码如下:

def demo4(a,n):
    sum = 0
    s = ''
    for i in range(1, n+1):
        s += str(a)
        sum += int(s)
    return sum

print(demo4(5,4))

需要注意的是,在循环中需要使用一个空字符串s来保存当前项的值,并在每次循环中对s进行更新。此外,还需要将每一项的字符串转换成整数,并相加得到最终结果。这种方法的时间复杂度为O(n^2),因为每次循环都需要进行字符串拼接和整数转换。如果要优化时间复杂度,可以考虑使用数学公式进行计算,或者使用其他字符串操作的方法。

其他方法(不建议)

另外,还有一种使用字符串的方式可以计算这个表达式的前n项值。

a = int(input('输入相加数a: '))
n = int(input('输入相加个数: '))
s = '0'
for i in range(n):
    s += '+' + str(a) * (i+1)
print(eval(s))

这个方法的时间复杂度也为O(n^2),因为每次循环都需要进行字符串拼接和表达式求值。此外,使用eval函数进行表达式求值存在一定的安全风险,因为eval函数可以执行任意代码。因此,在实际应用中,不建议使用这种方法进行计算。

总结

综上所述,计算形式如a+aa+aaa+aaaa+…+aaa…aaa的表达式前n项的值,可以使用字符串方式进行计算,也可以使用数学公式进行计算。

  • 字符串方式的代码可读性较好,容易理解和维护,但时间复杂度较高;
  • 数学公式的代码较短,时间复杂度较低,但可读性较差。

因此,在实际应用中,需要根据具体情况选择合适的方法。

猜你喜欢

转载自blog.csdn.net/weixin_56433857/article/details/131257406