"""
字符串相乘
需自行实现算法计算两个字符串相乘结果,
不可以使用把字符串直接转成整数后相乘,
"""
from day053 import string_sum
# 导入从 day053 模块中定义的 string_sum 函数
def str_multi_char(s1, char):
"""
计算一个字符串中的每个数字与指定字符(数字)的乘积,并返回结果字符串。
:param s1: 要乘以指定字符的字符串
:param char: 用于乘法的字符(数字)
:return: 字符串形式的乘法结果,不包含前导零
"""
carry = 0 # 进位初始化为0
char = int(char) # 将字符转换为整数
result = [] # 初始化结果列表
for item in reversed(s1): # 反向遍历字符串中的每个数字
item_num = int(item) * int(char) + carry # 计算当前位的乘积加上进位
carry = item_num // 10 # 更新进位
current = item_num % 10 # 获取当前位的数字
result.insert(0, str(current)) # 将当前位的数字插入结果列表的开头
if carry > 0: # 如果有进位,将其插入结果列表的开头
result.insert(0, str(carry))
return ''.join(result) # 将结果列表转换为字符串并返回
def strint_multi(s1: str, s2: str):
"""
两个大数字符串相乘的函数。
:param s1: 第一个大数字符串
:param s2: 第二个大数字符串
:return: 两个大数字符串相乘的结果
"""
result = '0' # 初始化结果为0
for index, item in enumerate(reversed(s2)): # 遍历第二个字符串,从右到左
if item == '0': # 如果当前字符是0,则跳过当前循环
continue
result_char = str_multi_char(s1, item) # 计算当前位乘积的结果
if result_char != '0': # 如果乘积不为0
result_char += '0' * index # 在乘积前添加适当数量的0,以保持位数对齐
result = string_sum(result, result_char) # 将当前位的乘积结果累加到总结果中
return result # 返回最终结果
# 打印 strint_multi 函数的示例运行结果
print(strint_multi('912345678900987654321', '112345678900987654321'))
评论前必须登录!
注册