""" 字符串相乘 需自行实现算法计算两个字符串相乘结果, 不可以使用把字符串直接转成整数后相乘, """ 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'))
评论前必须登录!
注册