最大公约数和数字n倍相加
问题1:编写一个程序计算s=a+aa+aaa+aaaa+...+aa..aa(例如2+22+222+2222+22222)的值,其中a属于正整数且a<=9,要求输入数字n和相加的数的个数m
def get_sum(n, m): res = 0 while m > 0: res += int('1' * m) * n m -= 1 return res print(get_sum(2, 5))
问题2:求两个数的最大公约数。
辗转相除法:欧几里德算法又称辗转相除法。以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
例如:1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1。
def get_max_common_num(m, n): if m == 0 or n == 0: raise ValueError while n != 0: m, n = n, m % n return m print(get_max_common_num(1997, 615)) print(get_max_common_num(8251, 6105))