Python|每日一练|非负数字转字符|非负整数求乘积|按位对齐|竖式乘法计算| 大数计算| reversed 函数:字符串相乘
admin
2024-05-13 11:46:44
0

题目:字符串相乘

题目内容:

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9。
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

计算原理

转换为字符串形式的乘法,和之前非负整数求和的思想类似。

https://blog.csdn.net/Medlar_CN/article/details/128590679

即采用字符串乘法的形式,可以极大的扩展乘数的范围,而不采用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

竖式乘法计算规则(摘自百度经验)

竖式指的是每一个数都是由上一个数变化而来,上一个数的个位数乘以2,如果需要进位,则往前面进1,然后个位升十位,以此类推,而个位上补上新的运算数字。

情况1:多位数乘一位数的竖式计算 :

相同数位对齐,用这个数分别去乘多位数每一个数位上的数,从个位数乘起,即从右往左乘 ,乘到哪一位就把积写在对应哪位数位的下面。

情况2:多位数乘两位数

把数位较多的数写在上面数位较少的写在下面,然后下面的因数要与写在上面的因数的数位要对齐,后第二个因数的个位数与写在上面的数的个位相乘,然后把相乘得到的积的末位写在个位上,再与十位上的数相乘写在十位上,以此类推。

reversed 函数的作用

类似于:while x > 0:#循环取x的最低位r = x % 10#反序输出原数据y = y*10+r#将低位至高位顺次截断,便于下次循环取x的最低位x = int(math.floor(x/10))

以迭代器的形式,返回反转后的数组。

示例代码:

class Solution(object):def multiply(self, num1, num2):if num1 == '0' or num2 == '0':return '0'res = ''ls1, ls2, = len(num1), len(num2)ls = ls1 + ls2arr = [0] * lsfor i in reversed(range(ls1)):for j in reversed(range(ls2)):arr[i + j + 1] += int(num1[i]) * int(num2[j])for i in reversed(range(1, ls)):#此处根据计算规则应为//,求余。原答案中的/为求商计算,计算结果为小数,有误。arr[i - 1] += arr[i] // 10arr[i] %= 10pos = 0if arr[pos] == 0:pos += 1while pos < ls:res = res + str(arr[pos])pos += 1return res
if __name__ == '__main__':s = Solution()print (s.multiply("98", "9"))

Ps: Python3 reversed 函数

摘自Python3 reversed 函数 | 菜鸟教程


描述

reversed 函数返回一个反转的迭代器。

语法

以下是 reversed 的语法:

reversed(seq)

参数

  • seq -- 要转换的序列,可以是 tuple, string, list 或 range。

返回值

返回一个反转的迭代器。


实例

以下展示了使用 tuple 的实例:

实例

#!/usr/bin/env python3# 字符串
seqString = 'Runoob'
print(list(reversed(seqString)))# 元组
seqTuple = ('R', 'u', 'n', 'o', 'o', 'b')
print(list(reversed(seqTuple)))# range
seqRange = range(5, 9)
print(list(reversed(seqRange)))# 列表
seqList = [1, 2, 4, 3, 5]
print(list(reversed(seqList)))

以上实例输出结果为:

['b', 'o', 'o', 'n', 'u', 'R']
['b', 'o', 'o', 'n', 'u', 'R']
[8, 7, 6, 5]
[5, 3, 4, 2, 1]

相关内容

热门资讯

谁说我爱你你就会爱我的? 谁说我爱你你就会爱我的?对于“谁爱我我就爱谁”的情感观,我认为它并不是一种健康的情感观。以下是我对此...
床尺寸规格都有哪些 床尺寸规格都有哪些按照尺寸来划分,床可以分为四大类,分别是单人床、双人床、大床还有定做的床。床的尺寸...
物理上回到原点什么意思? 物理上回到原点什么意思?一个质点运动了3s后回到原点然后静止,能不能说它在4s时回到原点?是不是在回...
《青春有你3》余景天和罗一舟,... 《青春有你3》余景天和罗一舟,你觉得谁会C位出道?青春有你三余景天和罗一周相比之下,我觉得余景天更有...
男孩爱哭是什么原因 男孩爱哭是什么原因孩子哭是天生的,在他们一出生的时候就会哭,所以哭是他们唯一不用学习的事情,也是他们...
小学生开学前疯狂赶作业:妈妈气... 小学生开学前疯狂赶作业:妈妈气出心脏病说起孩子写作业是很多家长比较头疼的一件事,老师布置作业之后,要...
暗黑3两分钟就能干掉成就怎么完... 暗黑3两分钟就能干掉成就怎么完成 猎魔人速想听实话么。猎魔人装备如果不行,2分钟是打不了的。大多数职...
异形是什么意思 异形是什么意思  异形释义:  1.不同于一般类型,表现多种不同类型 2.发育不同阶段有不同形状的 ...
北京到广州飞机几个小时? 北京到广州飞机几个小时?北京到广州的飞机飞行时间大约为**3个半小时**。具体的肆芦瞎飞行时间可能哗...
失恋失去的到底是什么? 失恋失去的到底是什么?失去的是一个伤害自己的人,一段糟糕的感情,而获得的却是重生,所以失恋没必要去难...
铁碎牙,天生牙,乾坤刀,斗鬼神... 铁碎牙,天生牙,乾坤刀,斗鬼神,这四把刀哪个最厉害?犬夜叉里面的铁碎牙第一,乾坤刀第二,斗鬼神第三,...
男人对女人说!懂你为情感,懂你... 男人对女人说!懂你为情感,懂你为守候是什么意思?男人对女人说,懂你为情感,懂你为守候的意思是:男人懂...
风起霓裳中李治的结局如何? 风起霓裳中李治的结局如何?在里面的结局还是非常不错的,而且这也是一部超级好看的作品。最后的大结局也非...
不要停下来,请继续往前走。的英... 不要停下来,请继续往前走。的英文是什么?Don't stop. ______ ______ go不要...
暗恋一个人会有结果吗? 暗恋一个人会有结果吗?我觉得如果暗恋一个人,但是一直不跟他说的话,是不会有结果的。只在心底默默的喜欢...
赛尔号异能星怎么去 赛尔号异能星怎么去真笨,这都进不去在裂空星系 ,或者你直接去任务里面可以直接传送过去打开地图,裂空星...
暗能量为什么能让宇宙膨胀,它真... 暗能量为什么能让宇宙膨胀,它真的可以撕碎宇宙?它会撕碎宇宙的,这样的能量让宇宙一直在变化。它有节奏的...
露营睡帐篷不怕坏人吗 露营睡帐篷不怕坏人吗 选择安全的坏人多的地方,坏人也不是到处都是。注意些,同时带上强力伙伴
一家之主有什么含义 一家之主有什么含义  一家之主释义:  家庭的当家人  [拼音] [yī jiā zhī zh...
鱼龙有哪些特点? 鱼龙有哪些特点?鱼龙早在三叠纪中期就出现了,它是恐龙的同代动物。在中生代,或庆它们都是海洋里的“霸主...