P1303 A*B Problem Python题解

A*B Problem

题目背景

高精度乘法模板题。

题目描述

给出两个非负整数,求它们的乘积。

输入格式

输入共两行,每行一个非负整数。

输出格式

输出一个非负整数表示乘积。

样例 #1

样例输入 #1

1 
2

样例输出 #1

2

提示

每个非负整数不超过 1 0 2000 10^{2000} 102000

题解

高精度乘法,洛谷这道题数据不够丰富,至少高精度减法是不能直接int过的,而这道题的所有数据都满足直接用int直接过,那就没什么好说的了。废话,肯定还是得贴一个python的高精度乘法,不然这题解有什么好看的,^ _ ^

先看看高精度乘法字符串实现吧(不然直接int没啥好看的呀)
反转字符串得数字符合低位在数组低位,高位在数组高位,以及恢复大数字等操作可以去看我的高精度减法题解:P2142 高精度减法 Python 题解
这里就不贴这些操作的详细内容了,主要讲讲乘法运算的过程:

  1. 乘法竖式运算,一般是小的数放下面,大的数放上面(看人,都行,但是习惯是小在下大在上)
  2. 乘法竖式运算最多要有 l e n ( 较小的数 ) len(较小的数) len(较小的数) 层相加:
    在这里插入图片描述
    这里 l e n ( 44 ) = 2 len(44) = 2 len(44)=2所以有两层数相加
  3. 乘法竖式运算最下层数字最多最多有 l e n ( a ) + l e n ( b ) len(a)+len(b) len(a)+len(b)位数字,我图方便,直接设成了 2 ∗ l e n ( 较大的数 ) + 1 2*len(较大的数)+1 2len(较大的数)+1

下面是代码:

# 反转数字字符串为反转数字列表
def tmpReverse(numStr) -> list:tmp = []for i in range(len(numStr) - 1, -1, -1):tmp.append(ord(numStr[i])-ord("0"))return tmpdef reverseBigNum(numStr, lenMAXNum) -> list:lenNumStr = len(numStr)if lenNumStr == lenMAXNum:reverseBN = tmpReverse(numStr)else:reverseBN = tmpReverse(numStr)reverseBN.extend([0 for _ in range(lenMAXNum - lenNumStr)])return reverseBNdef recoverBigNum(numList):num, tag = "", 0for i in range(len(numList)-1, -1, -1):if numList[i] != 0:tag = ibreakfor j in range(tag, -1, -1):num += str(numList[j])return num if num else "0"# 比较两数的大小
def cmpdayv(numListA, numListB, lenMAXNum):for i in range(lenMAXNum-1, -1, -1):if numListA[i] == numListB[i]:continueelif numListA[i] > numListB[i]:return 1else:return -1return 0def add(numListA, numListB):lenList = len(numListA)ret = [0 for _ in range(lenList)]for i in range(lenList):ret[i] += numListA[i] + numListB[i]if ret[i] >= 10:ret[i + 1] += 1ret[i] -= 10return retdef mBN1(numListA, numListB, lenMAXNum ,lenMultipleNum):mulBN = [[0 for _ in range(lenMultipleNum)] for _ in range(lenMAXNum)]for b in range(lenMAXNum):for a in range(lenMAXNum):mulBN[b][a+b] += numListB[b] * numListA[a]if mulBN[b][a+b] >= 10:mulBN[b][a+b+1] += mulBN[b][a+b]//10mulBN[b][a+b] %= 10ret = [0 for _ in range(lenMultipleNum)]for i in range(lenMAXNum):ret = add(ret, mulBN[i])return retdef multipleBigNum(numListA, numListB, lenMAXNum):lenMultipleNum = 2*lenMAXNum + 1if cmpdayv(numListA, numListB, lenMAXNum) == 1:ret = mBN1(numListA, numListB, lenMAXNum, lenMultipleNum)else:ret = mBN1(numListB, numListA, lenMAXNum, lenMultipleNum)return reta = input().strip().replace("\r","")
b = input().strip().replace("\r","")
lenA = len(a)
lenB = len(b)
lenMAXNum = max(lenA, lenB)
numListA = reverseBigNum(a, lenMAXNum)
numListB = reverseBigNum(b, lenMAXNum)
mulBigNum = multipleBigNum(numListA, numListB, lenMAXNum)
print(recoverBigNum(mulBigNum))

在这里插入图片描述

在这里再贴一个直接int的代码,python还是轻松滴 ^ _ ^:

a = input().strip()
b = input().strip()
print(int(a)-int(b))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1549062.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

万字面试题大模型面试,最全八股和答案

自ChatGPT开启大模型时代以来,大模型正迎来飞速发展,现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢,本文详细整理了全套的面试问题及答案,希望对大家有所帮助! 目录 大模型&a…

平衡二叉搜索树插入的实现

前言 因为二叉搜索树在插入的时候最坏的情况可能会变成一条单一链表,从而使查找或者插入的时候消耗大量的时间。所以为了解决这一情况诞生了平衡二叉搜索树,其作用是为了减少二叉搜索树的整体高度,从而使查找插入删除的效率提高。 一、平衡二…

Sublime Text4的下载安装以及汉化

sublime官网:https://www.sublimetext.com/ 按照指示一步步操作即可 汉化操作: 等一会就会弹出搜索框, 帮助菜单这里可以切换语言,

【C++报错已解决】std::bad_alloc

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

react项目中接入(集成)prettier

目的 让我们的代码不管经过多少人的改动,始终都会保持同样的编写格式,保证多人开发时,大家使用的按键格式都是一样的 prettier官网 安装 固定版本安装 --save-exact 记录该软件包的精确版本号(官方推荐的安装方式) npm i -D --save-exact…

常见组件详解(六):torch.nn.AvgPool2d()、torch.nn.AdaptiveAvgPool2d()

文章目录 一、torch.nn.AvgPool2d():二维平均池化1.1参数介绍1.2代码案例 二、torch.nn.AdaptiveAvgPool2d():自适应平均池化2.1参数介绍2.2代码案例2.3使用场景 一、torch.nn.AvgPool2d():二维平均池化 1.1参数介绍 torch.nn.AvgPool2d( k…

第T2周:TensorFlow实现彩色图片分类(CIFAR10数据集),并实现自己的真实图片分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标: 加载CIFAR-10数据集进行训练,然后能够对彩色图片进行分类 具体实现: (一)环境: 语…

Python | Leetcode Python题解之第442题数组中重复的数据

题目: 题解: class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:ans []for x in nums:x abs(x)if nums[x - 1] > 0:nums[x - 1] -nums[x - 1]else:ans.append(x)return ans

可以免费制作表情包的AI工具来了!

一直想自己制作一套表情包,但一直没有找到好用的工具,要么就是太麻烦,要么就是不免费。 今天AI表情包免费制作工具来了,手机就可以直接做表情包,非常方便。 先看效果~ 工具用到的是通义APP,可以在频道中找…

一款革命性的AI写作工具——文字游侠AI大模型重大升级,创作效率提高高达20倍,小白也能轻松实现月入过万!

在自媒体创作的浪潮中,如何高效地生产高质量内容成为许多创作者的难题。然而,随着AI技术的飞速发展,这一难题得到了完美的解决。今天,我要为大家介绍一款革命性的AI写作工具——文字游侠AI大模型,它不仅能够大幅提高创…

Rust赋能前端:为WebAssembly 瘦身

❝ 凡事你一旦接纳了,就不存在了;你看不惯它,它就一直折磨你 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder ❝ 此篇文章所涉及到的技术有 WebAssembly Rust SIMD LLVM binaryen 因为,行文字…

Llama 3.1 技术研究报告-5

5.3 人工评测 除了在标准基准测试集上的评估外,我们还进⾏了⼀系列⼈类评估。这些评估使我能够测量和优化模型性能的更微妙⽅⾯,例如模型的语调、冗⻓性和对细微差别及⽂化背景的理解。精⼼设计的⼈类评估密切反映了⽤⼾体验,提供了模型在现…

PacketSender使用说明

1、Packet Sender介绍 Packet Sender是一个开源实用程序,允许发送和接收TCP、UDP和SSL(加密TCP)数据包,以及HTTP/HTTPS请求和面板生成。主线分支正式支持Windows、Mac和桌面Linux(带Qt)。其他地方可能会重…

隧道灯光远程控制系统的设计与实现(论文+源码)_kaic

摘要 随着互联网的发展,物联网的时代己经到来。无线控制技术的应用已经普及到了我们生活中的各个角落。节能环保的意识也在不断的加强,隧道照明作为隧道建设的一个主要的环节,一个好的隧道照明系统不仅仅能保障隧道车辆的正常通行&#xff0c…

无需科学!Copilot网页版GPT-4无限制对话来了!

之前本公众号讲过: 微软copilot分为免费版copilot、个人家庭版copilot pro(每月20刀)和商业版copilot for Microsoft 365(每月30刀)。 其中免费版和个人家庭版的copilot无论在任何情况下使用都需要科学手段。 商业版…

什么是前缀索引?

什么是前缀索引? 1、什么是前缀索引?2、为什么要使用前缀索引?3、如何选择前缀长度?4、创建前缀索引的SQL语法5、示例 💖The Begin💖点点关注,收藏不迷路💖 在处理包含长字符串的数据…

3款照片人物开口说话AI工具,跟真人说话一样~免费!短视频带货必备!(附教程)

大家好,我是画画的小强 今天给大家分享一个AI图片口播数字人讲认知思维,单号佣金赚5W的AI带货信息差玩法,许多小伙伴表示对这类AI带货玩法感兴趣。 说实话,现在AI照片人物对口型工具,越来越逼真,很难辨识出…

8.使用 VSCode 过程中的英语积累 - Help 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂,各种生活的元素也都可以做为我们的学习对象,本文将利用 VSCode 页面上的各种英文元素来做英语的积累,如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的,借此做英语积累再合适不过&a…

牛犇啊!LSTM+Transformer炸裂创新,精准度高至95.65%!

【LSTMTransformer】作为一种混合深度学习模型,近年来在学术界和工业界都受到了极大的关注。它巧妙地融合了长短期记忆网络(LSTM)在处理时序数据方面的专长和Transformer在捕捉长距离依赖关系上的优势,从而在文本生成、机器翻译、…

做中视频计划,哪里找素材?推荐几个热门中视频素材下载网站

在做中视频计划时,寻找合适的素材至关重要。抖音上那些热门的中视频素材都是从哪里下载的呢?以下五大高清素材库值得收藏,赶紧来看看吧! 蛙学网 蛙学网提供了百万级的中视频素材,质量高且是4K高清无水印,视…