欢迎光临
我们一直在努力

字符串相乘

"""
字符串相乘
需自行实现算法计算两个字符串相乘结果,
不可以使用把字符串直接转成整数后相乘,
"""

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'))
赞(0) 打赏
未经允许不得转载:创想未来 » 字符串相乘

评论 抢沙发

评论前必须登录!

 

更好的Python学习

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册