C++解决大数乘法

本文讲述了如何在编程中解决大数相乘问题,通过字符串处理和数组操作,实现乘法运算并处理进位,同时介绍了乘法规则在代码中的应用。作者还提供了洛谷AC代码示例,供读者理解和讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目背景

题目链接:P1303 A*B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意很简单:如何解决常见的数据类型无法完成的大数相乘问题,大家可以打开上方链接查看题目

其实大数的加法、减法、乘法思路都极度类似,只在关键几行代码上略有不同。在我的另一篇文章里记录了大数加法的过程,感兴趣的uu可以去瞟一眼(因为瞟一眼就可以掌握啦,前提是本篇的乘法你已经死死拿捏)。Unfortunately,大数除法则相对比较难理解,等在洛谷AC除法后,俺还会再来记录的。

思路

  1. 使用字符串接收输入的两个大数s1,s2
  2. 将s1,s2的每一位存为数组里的每一个元素,注意:在下面的代码中,将大数倒序存在了数组里,例:s1为“321”,存到数组里为a[0]=1,a[1]=2,a[2]=3。(正序也可以,这里采取倒序只是为了循环时 i 从0开始,看着比较舒服)
  3. 利用两层循环将数组里的对应位做乘法运算,并将结果存到结果数组 c 里,公式为c[i+j] += (a[i] * b[j]) 。如果c[i+j]>=10,我们需要进位,即c[i+j+1] += c[i+j]/10, c[i+j] %= 10; 题目的关键就在于公式 “c[i+j] += (a[i] *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MosesCD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值