高精度乘法的实现

         这是C++算法基础-基础算法专栏的第九篇文章,专栏详情请见此处


引入

        上次我们学习了高精度加法的实现,这次我们要学习高精度减法的实现。

        高精度乘法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现。

        在这里就不再详细讲解,只讲解主体过程qwq

        这里需要说明,此博客(包括后面一篇),都是实现两个高精度数之间的计算,而算法基础课中仅仅实现了一个高精度数​​​​​​​和一个低精度数​​​​​​​之间的计算,思路和代码上两者有所不同。

主体过程

        呃,高精度乘高精度先等会儿,我们先看一种简单的情况。

        高精度乘低精度

        高精度乘低精度的原理和小学学习的竖式乘法是一样的。

        

         概括来说,从个位开始,将低精度乘数与高精度乘数的每一位相乘,存进积的对应位置上,若当前位达到10进位,也就是将下一位加上当前位(整)除以10,并把当前位模10

        89\times 123用高精度计算(123为高精度乘数,89为低精度乘数),先乘个位,3\times 89267,发现267大于等于10,所以将267(整)除以10,得26,将其存入答案的十位,再将26710,得7,将其存入答案的个位;

        再乘十位,2\times 89+26204,发现204大于等于10,所以将204(整)除以10,得20,将其存入答案的百位,再将20410,得4,将其存入答案的十位;

        再乘百位,1\times 89+20109,发现109大于等于10,所以将109(整)除以10,得10,将其存入答案的千位,再将10910,得9,将其存入答案的百位;

        最后,千位的10大于等于10,所以将10(整)除以10,得1,将其存入答案的万位,再将1010,得0,将其存入答案的千位;得到答案10947

        高精度乘高精度

        我们通过高精度乘低精度可以看出,运算89\times 123,实际就是将123分解成1\times 10^{2}+2\times 10^{1}+3\times 10^{0},再分别用每一位去乘89

        高精度乘高精度也是一样的。若还想计算高精度乘高精度的89 \times 123,我们就可以受高精度乘低精度的启发,将89123分解成8 \times 10^{1}+9\times 10^{0}1\times 10^{2}+2\times 10^{1}+3\times 10^{0},再分别相乘,即9\times 10^{0}\times 3\times 10^{0}+8 \times 10^{1}\times 3\times 10^{0}+9\times 10^{0}\times 2\times 10^{1}+8 \times 10^{1}\times 2\times 10^{1}+9\times 10^{0}\times 1\times 10^{2}+8 \times 10^{1}\times 1\times 10^{2},化简,得9\times 3\times 10^{0}+8 \times 3\times 10^{1}+9\times 2\times 10^{1}+8 \times 2\times 10^{2}+9\times 1\times 10^{2}+8 \times 1\times 10^{3}

        从这个复杂的式子上可以看出,若当前两个乘数分别的位置ij相乘时,答案会存储在i+j这个位置上。

        嗯,有点复杂,结合代码食用会好一些。

代码

        下面给出高精度乘法的代码:

void mul(int a[],int b[],int c[]){
	clear(c);
	for(int i=0;i<L-1;i++){
		for(int j=0;j<=i;j++)
			c[i]+=a[j]*b[i-j];
		if(c[i]>=10){
			c[i+1]+=c[i]/10;
			c[i]%=10;
		}
	}
}

上一篇-高精度减法的实现    C++算法基础专栏文章    下一篇-高精度除法的实现


每周六更新一篇文章,内容一般是自己总结的经验或是在其他网站上整理的优质内容

点个赞,关注一下呗~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IKVM.net调用Jar包实现SM4解密

近期&#xff0c;我深入学习了如何使用IKVM.net来调用Jar包&#xff0c;这次的学习经历让我对Java与.NET之间的互操作性有了更深刻的理解。IKVM.net作为一款强大的工具&#xff0c;为我们打通了Java与.NET之间的桥梁&#xff0c;使得在.NET环境中调用Java库变得简单而高效。 在…

VB.net实战(VSTO):VSTOwpf体验框架打包教程

如果是考虑到Wps用户较多&#xff0c;就不建议采用侧边栏的形式 只是个体验框架&#xff0c;界面未作美化&#xff0c;office的用户可以用任意一种窗体&#xff0c;喜欢那个界面就写那个界面&#xff0c;wps的侧边栏只能弹出一部分&#xff0c;每次需要的手动拖动。 打包了案例…

Spring Bean 生命周期详解

Spring Bean 生命周期详解 在 Spring 框架中&#xff0c;Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段&#xff1a;实例化、属性注入、初始化、…

如何基于Redis实现分布式锁?

分布式锁介绍 对于单机多线程来说&#xff0c;在 Java 中&#xff0c;我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。 下面是我对本地锁画的一张示意图。 本地锁 从图中可以看出&#xf…

NetSuite Non-Inventory Item 公司内外采购总账影响

上篇文章提到&#xff0c;Non-Inventory Item的科目维护会根据各个企业的实际情况而有所不同&#xff0c;通常情况下都涉及外部交易&#xff0c;即对外采购与销售&#xff1b;另外也涉及到公司内部的相关交易&#xff0c;本篇以采购为例&#xff0c;来看看公司内外采购交易所对…

【分布式系列】分布式锁timeout了怎么办?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Apache IoTDB vs InfluxDB 开源版,架构性能全面对比!

分布式、端边云同步、读写查询性能&#xff0c;Apache IoTDB 与 InfluxDB 开源版的详尽对照&#xff01; 在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长&…

Mysql安装 /lib64/libc.so.6: version `GLIBC_2.28‘ not found 缺少 glibc-2.28.tar.gz

问题&#xff1a;安装Mysql出现 Error mysql/bin/mysqld: /lib64/libm.so.6: version GLIBC_2.27 not found (required by mysql/bin/mysqld) mysql/bin/mysqld: /lib64/libc.so.6: version GLIBC_2.28 not found (required by mysql/bin/mysqld) mysql/bin/mysqld: /lib64/lib…

【仿真建模-anylogic】INetwork相关接口说明

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-22 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 说明 INetwork为辊道网络、路线网路的顶层接口&#xff0c;其组成元素有节点和路径两种&#xff0c;对应的接口为INode、IP…

Android-Android Studio-FAQ

1 需求 2 接口 3 Android Studio xml布局代码补全功能失效问题 最终解决方案就是尝试修改compileSdk 为不同SDK版本来解决问题&#xff0c;将原本34修改为32测试会发现xml代码补全功能有效了&#xff01; 参考资料 Android Studio xml布局代码补全功能失效问题_android studi…

10.华为路由器使用ospf动态路由连通两个部门网络

目的&#xff1a;实验ospf动态路由协议连通A与B部门 AR1配置 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei]vlan batch 10 [Huawei]int Vlanif 10 [Huawei]int e0/0/0 [Huawei-Ethernet0/0/0]port link-type access [Huawei-Ethernet0/0/0]por…

CubeFS - 新一代云原生存储系统

CubeFS 是一种新一代云原生存储系统,支持 S3、HDFS 和 POSIX 等访问协议,支持多副本与纠删码两种存储引擎,为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性。 官方文档 CubeFS 作为一个云原生的分布式存储平台,提供了多种访问协议,因此其应用场景也非常广泛,下面…

Apple - Text Attribute Programming Topics

本文翻译整理自&#xff1a;Text Attribute Programming Topics&#xff08;更新日期&#xff1a;2004-02-16 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextAttributes/TextAttributes.html#//apple_ref/doc/uid/10000088i 文章目录 一、文…

音视频开发—FFmpeg 打开摄像头进行RTMP推流

实验平台&#xff1a;Ubuntu20.04 摄像头&#xff1a;普通USB摄像头&#xff0c;输出格式为YUV422 1.配置RTMP服务器推流平台 使用Nginx 配置1935端口即可&#xff0c;贴上教程地址 ubuntu20.04搭建Nginxrtmp服务器) 2.配置FFmpeg开发环境 过程较为简单&#xff0c;这里不…

【龙晰 离线安装openssl-devel】openssl-devel rpm 离线安装 需要下载哪些安rpm 包

进入龙晰镜像源地址下载 http://mirrors.openanolis.cn/anolis/8/BaseOS/x86_64/os/Packages/(base) [rootAI lib64]# yum install openssl-devel Last metadata expiration check: 14:03:32 ago on Fri 21 Jun 2024 07:26:56 AM CST. Dependencies resolved. Package …

不服 GPT-4o ,就是干?

OpenAI 最大的对手 Anthropic &#xff0c;深夜发布了他们迄今为止最智能的模型&#xff1a;Claude 3.5 Sonnet。 这俩家公司的竞争愈演愈烈&#xff0c;Anthropic 声称新 Claude AI 超越了 GPT-4o。 通过 Anthropic 发布的测试报告来看&#xff0c;新模型在推理、知识储备、代…

怎么处理整合了shiro的应用的RPC接口鉴权问题

这篇文章分享一下&#xff1a;当一个服务提供者整合了shiro安全框架来实现权限访问控制时&#xff0c;服务消费者通过feign请求服务提供者的接口时的鉴权不通过问题。 问题描述 博主有一个项目pms&#xff08;权限管理系统&#xff09;&#xff0c;使用了shiro框架来实现鉴权功…

什么是局域网IP?

局域网IP&#xff08;Local Area Network IP&#xff09;指的是在局域网内使用的IP地址。局域网是指在某个地理区域内&#xff0c;由一组相互连接的计算机组成的小型网络&#xff0c;常见于家庭、学校、办公室等场所。局域网IP可以用来实现内网穿透&#xff0c;即在复杂的网络环…

http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解

文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞&#xff08;Head-of-Line Blocking&#xff09;1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间&#xff1a;1991年 特点&#xff1a; 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容&#xff0…

2.XSS-存储型

储存型XSS 或持久型 XSS 交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。 在留言板里面进行测试一下是否有做过滤 "<>?&66666点击提交 查看元素代码&#xff0c;已经提交完成&#xff0c;并且没有做任何的过滤措施 接下来写一个javascrip…