浙大版《Python 程序设计》题目集 第6章函数-1 使用函数求特殊a串数列和 (10分)

使用函数求特殊 a a a串数列和 (10分)

给定两个均不超过9的正整数 a a a n n n,要求编写函数 f n ( a , n ) fn(a,n) fn(a,n) a + a a + a a a + + ⋯ + a a ⋯ a a a+aa+aaa++⋯+aa⋯aa a+aa+aaa+++aaaa( n n n a a a)之和, f n fn fn须返回的是数列和

函数接口定义:

f n ( a , n ) fn(a,n) fn(a,n)其中 a a a n n n 都是用户传入的参数。 a a a 的值在 [ 1 , 9 ] [1, 9] [1,9]范围; n n n [ 1 , 9 ] [1, 9] [1,9]区间内的个位数。函数须返回级数和

裁判测试程序样例:

/* 请在这里填写答案 */
a,b=input().split()
s=fn(int(a),int(b))
print(s)

输入样例:

在这里给出一组输入。例如:

2 3

输出样例:

246

Python

先计算a、aa、aaa再将这几个数相加

这种是比较麻烦的做法,先通过for循环,将2,22,222表示出来,再通过for循环将已经表示出的变量相加。

def fn(a, n):
    sum = 0
    for i in range(n):
        s = 0
        q = 0.1  # 记录10次方
        for j in range(i + 1):
            q = q * 10
            p = int(q) * a
            s = s + p
        sum = sum + s
    return sum
每次记录

通过观察网络上的代码,其实问题可以简化,这个和可以这么表示,2,20+2,200+22的加和

def fn(a, n):
    sum, res = 0, 0
    for i in range(1, n + 1):
        res = res + a
        a = a * 10
        sum = res + sum
    return sum
快速字符串转整型

暴力构造相同字符串 a a a aaa aaa转化为int类型

def fn(a, n):
    return sum(int(str(a) * i) for i in range(1, n + 1))

你可能感兴趣的:(PAT)