当前位置: 首页 > news >正文

大数高精度乘法详解

的高精度乘法题目(A * B Problem)。

解题思路:
由于题目中给出的数字最大可以达到 $10^{2000}$,这远远超过了 C 语言中long long类型(最大约 $9 \times 10^{18}$)的存储范围。因此,我们不能直接使用乘法运算符*,而需要使用数组来模拟我们小学手算的竖式乘法过程。

算法步骤:

  1. 存储:使用字符串读入两个大数,然后将它们倒序存入整型数组中(让数组下标 0 对应个位,下标 1 对应十位,以此类推),这样方便对齐计算。
  2. 乘法:使用双重循环,用第一个数的每一位去乘第二个数的每一位。
    • 规律:数组a的第i位 乘以 数组b的第j位,结果应该累加到结果数组c的第i + j位。
  3. 进位:遍历结果数组c,处理进位(c[i+1] += c[i] / 10c[i] %= 10)。
  4. 去前导零:计算完成后,结果的高位可能是 0,需要从最高位开始去除多余的 0(注意如果结果本身就是 0,要保留一个 0)。
  5. 输出:倒序输出结果数组。

C语言代码实现:

#include <stdio.h> #include <string.h> int main() { // 定义字符数组存储输入的大数,题目限制10^2000,所以开2500足够 char s1[2500], s2[2500]; // 定义整型数组存储转换后的数字和结果 // 结果的最大长度通常是两个乘数长度之和,所以开大一点,比如5000 int a[2500], b[2500], c[5000]; int lena, lenb, lenc; int i, j; // 初始化数组为0,防止垃圾值影响计算 memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); // 读入两个大数,scanf会自动跳过换行符和空格 if (scanf("%s %s", s1, s2) != 2) return 0; lena = strlen(s1); lenb = strlen(s2); // 【关键步骤1】倒序存入数组 // 将字符串转换为数字,并且倒序存储,让 a[0] 存储个位,a[1] 存储十位... for (i = 0; i < lena; i++) { a[i] = s1[lena - 1 - i] - '0'; } for (i = 0; i < lenb; i++) { b[i] = s2[lenb - 1 - i] - '0'; } // 【关键步骤2】模拟竖式乘法 // a的第i位 乘以 b的第j位,结果累加到 c的第 i+j 位 for (i = 0; i < lena; i++) { for (j = 0; j < lenb; j++) { c[i + j] += a[i] * b[j]; } } // 【关键步骤3】处理进位 // 结果的最大可能长度是 lena + lenb lenc = lena + lenb; for (i = 0; i < lenc; i++) { if (c[i] >= 10) { c[i + 1] += c[i] / 10; // 进位加到下一位 c[i] %= 10; // 当前位保留个位 } } // 【关键步骤4】去除前导零 // 从最高位(lenc-1)开始检查,如果是0且长度大于1,则长度减1 // 注意:如果结果就是0,lenc最终会变为1,保留唯一的0 while (lenc > 1 && c[lenc - 1] == 0) { lenc--; } // 【关键步骤5】倒序输出结果 for (i = lenc - 1; i >= 0; i--) { printf("%d", c[i]); } printf(" "); return 0; }

代码使用说明:

  1. 将代码复制到 C 语言编译器中。
  2. 输入两个大整数(可以分两行输入,也可以空格隔开)。
  3. 程序会输出它们的乘积。

示例测试:

  • 输入:
    2 3
    输出:6
  • 输入:
    12345678901234567890 98765432109876543210
    输出:1219326311370217952261850327336229233322374638000000(正确的高精度结果)
http://www.jsqmd.com/news/913596/

相关文章:

  • 2026年贵州中职学校实测评测:贵州民办中职、贵州职校专业、贵州职校升学、贵州职校学校、贵州职校学费、贵州职校招生选择指南 - 优质品牌商家
  • 从图像变形到风格迁移:PyTorch F.grid_sample在CV实战中的3个高级应用(附完整代码)
  • 终极Windows热键侦探:一键揪出占用你快捷键的“元凶“
  • 2026年至今,宁波塑料喷涂加工优质厂家推荐哪家?深度解析宁海致精电子科技 - 2026年企业资讯
  • 洞察2026年Q2吉林钢结构安装生产:技术演进与可靠伙伴选择 - 2026年企业资讯
  • Keil C51调试EFM8时J-Link驱动错误解决方案
  • 解读民法典自然人 民事权利能力和民事行为能力 第二十条
  • Claude Opus 4.8 实测:更精确、更诚实,但创作还是不如 4.6
  • 保姆级教程:在Unity 2022 LTS中一步步导入自定义URDF模型并实现键盘控制
  • 告别通勤管理内耗|熊猫出行企业版,一站式破解企业出行全难题
  • 2026台州专业包包回收机构评测:台州黄金保管、台州黄金回收、台州黄金抵押、台州专业名表回收、台州包包回收、台州台州奢侈品回收选择指南 - 优质品牌商家
  • 2026年圈山围栏网主流生产企业实力排行盘点:高速公路护栏网/光伏围栏网/圈山围栏网/工程护栏网/护栏隔离栏/机场围界/选择指南 - 优质品牌商家
  • Windows HEIC缩略图预览:终极免费解决方案
  • STM32 GPIO实战:从零实现三路LED动态控制与模式切换
  • 告别呆板粒子!用Niagara用户参数和曲线控制,让你的UE场景蒲公英更自然
  • 别再被‘Some objects were not cleaned up’报错困扰!手把手教你调试Unity对象生命周期
  • 2026年高性价比镜片厂家TOP5排行:儿童专用镜片、变色镜片、手机镜、抗疲劳镜片、星乐视4.0三效压轴、渐进多焦点镜片选择指南 - 优质品牌商家
  • 别再为curl报错发愁了!CentOS 7下自签名证书的保姆级信任指南(附CA证书更新)
  • Qt Creator 19.0.0 (Community)下载
  • 当C++遇见Matlab:搞懂mwArray这个‘中间人’,才能玩转混合编程
  • 从FairMOT到Transformer:手把手拆解MOT中的Embedding进化史,附PyTorch核心代码实现
  • grep 命令实例教程
  • 2026年国内权威变色镜片厂家排行:高性价比镜片/高清镜片/伟星星乐视/伟星星优学/伟星近视防控镜片/儿童专用镜片/选择指南 - 优质品牌商家
  • 2026年当下,探寻武汉通过率高的医学类出国留学品牌公司,哪家更专业? - 2026年企业资讯
  • 分布式核心知识
  • 别再硬啃官方文档了!Element Plus的el-select和el-input样式自定义,看这篇就够了(附完整CSS代码)
  • 超越官方流程:用Signac挖掘scATAC-seq数据中的细胞类型特异性调控元件
  • 2026年5月第5周网络安全形势周报
  • MATLAB掌纹识别实战工程包:预处理+Gabor纹理提取+匹配比对全链路源码
  • 深入LIN Driver状态机:搞懂Sleep/Wakeup内部唤醒与外部唤醒的实战区别