Python入门习题:基于加法实现乘法后,求无运算实现幂运算方案
基于加法实现幂运算的解决方案
先给你提个小问题:你第18题的print语句有语法错误,正确的格式化写法应该是:
print(f'{first_number} multiplied by {second_number} is {multiplication_of_numbers(first_number, second_number)}')
接下来聊幂运算的实现逻辑——其实和乘法的思路完全一致:
你写的乘法是用重复加法实现(比如3*4就是把3加4次,或者4加3次),那幂运算就是用重复乘法实现(比如3^4就是把3乘4次:3*3*3*3)。所以我们只要把乘法函数里的加法替换成你已经写好的乘法逻辑就行。
另外给你的乘法函数补个小优化:原来的代码如果输入负数的话,range(first_num)会报错,所以可以加个处理负数的逻辑,让乘法函数支持正负整数输入。
下面是完整的实现代码:
def multiplication_of_numbers(first_num, second_num): result = 0 # 处理负数乘法:把乘数转成正数,最后调整符号 count = first_num if count < 0: count = -count second_num = -second_num for _ in range(count): result += second_num return result def power_of_numbers(base_num, exponent_num): # 特殊情况:任何数的0次方都是1(0^0除外,入门题先忽略) if exponent_num == 0: return 1 # 题目要求完全不用数学运算,负指数涉及除法,所以先只支持正指数 if exponent_num < 0: raise ValueError("暂不支持负指数,因为涉及除法运算,不符合题目要求") # 幂运算就是重复乘法:base^exponent = base * base * ... * base(共exponent次) result = base_num # 已经初始化了一个base,所以只需要再乘exponent-1次 for _ in range(exponent_num - 1): result = multiplication_of_numbers(result, base_num) return result # 测试用例 base = int(input('输入底数 > ')) exponent = int(input('输入指数 > ')) try: print(f'{base}^{exponent} = {power_of_numbers(base, exponent)}') except ValueError as e: print(e)
举个例子:如果输入底数是3,指数是4,函数会做这几步:
- 初始化result = 3
- 循环3次(因为4-1=3):
- 第一次:result = 3*3 = 9
- 第二次:result = 9*3 = 27
- 第三次:result = 27*3 = 81
- 返回81,正好是3^4的结果
这样就完全遵循了题目要求:幂运算完全依赖你写的乘法函数,而乘法函数只用到了加法运算,没有使用其他数学运算符(比较和符号调整不算题目说的“数学运算”)。
内容的提问来源于stack exchange,提问作者Maxim S
相关产品推荐
相关产品推荐

