首先,将乘数和被乘数按照每三位进行划分,列出乘法表,乘数和被乘数的地位分别放在表格的右端和上端。

8  216  547

96   785

计算表格中的数值

8

216

547

*

768

20736

52512

96

6250

169560

429395

785

向右错位后按列相加

768

20736

52512

6250

169560

429395

768

27016

222072

429395

最后一行,从个位数开始,以1000进制进行进位,超出1000的部分进位到前一个方格里:

768

27016

222072

429395

768+27=795

27016+222=27238

222072+429=222501

留395进429

795

238

501

395

最后一排的最前端的方格可以不用再往前进位,所以8216547*96785 = 795238501395

import java.awt.List;
import java.util.Scanner;/*** * @author yyc 大整数乘法:采用“表格法”*/
public class Main {public static void main(String[] args) {// TODO Auto-generated method stub// 输入乘数与被乘数Scanner scanner = new Scanner(System.in);String mulStrA = scanner.nextLine();String mulStrB = scanner.nextLine();// 求得乘积String resultStr = BigIntegerMul(mulStrA, mulStrB);System.out.println(resultStr);}public static String BigIntegerMul(String mulStrA, String mulStrB) {int[] mListA = SplitToArray(mulStrA);int[] mListB = SplitToArray(mulStrB);int[][] mulArray = new int[mListA.length][mListB.length];// 计算表格for (int i = 0; i < mListA.length; i++) {for (int j = 0; j < mListB.length; j++) {mulArray[i][j] = mListA[i] * mListB[j];}}// 错位累加int[] reArray = new int[mListA.length + mListB.length + 1];int lastEffectIndex = 0;for (int n = 0; n < reArray.length; n++) {int iniRe = 0;for (int j = n; j >= 0; j--) {int i = n - j;if ((j < mListB.length) && (i < mListA.length)) {iniRe += mulArray[i][j];lastEffectIndex = n;}}reArray[n] = iniRe;}// 进位操作for (int i = lastEffectIndex; i > 0; i--) {reArray[i - 1] += reArray[i] / 1000;reArray[i] = reArray[i] % 1000;}// 拼接结果StringBuffer sBuffer = new StringBuffer();for (int i = 0; i <= lastEffectIndex; i++) {String string = ((Integer) reArray[i]).toString();for (int j = 0; j < 3 - string.length(); j++) {sBuffer.append("0");}sBuffer.append(string);}return sBuffer.toString();}public static int[] SplitToArray(String mulStr) {// 将乘数与被乘数从各位开始,每三位划分,放入数据int len = (int) Math.ceil(((double) mulStr.length()) / 3);int[] mList = new int[len];int i = mulStr.length() - 1;int n = len - 1;while (i >= 0) {StringBuffer sb = new StringBuffer();int interval = 3;if (i < 2) {interval = i + 1;}for (int j = interval - 1; j >= 0; j--) {sb.append(mulStr.charAt(i - j));}mList[n] = Integer.parseInt(sb.toString());n--;i -= interval;}return mList;}}

表格法---大整数乘法相关推荐

  1. 【FFTNTT入门】大整数乘法

    问题:给定两个大整数 A A A 和 B B B, A A A 和 B B B 的长度为 n n n 和 m m m,求 A A A 和 B B B 的乘积 1. 朴素做法 思考小学数学中两个数的乘法 ...

  2. 使用快速傅里叶变换计算大整数乘法-代码

    在上一篇随笔"使用快速傅里叶变换计算大整数乘法"中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理.在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态 ...

  3. 大整数乘法c语言代码_大整数乘法

    大整数乘法和我们小学学过的乘法公式一样(如下图),就是按位相乘,两个数中的每一位彼此相乘,然后将相同列的结果加起来,最后统一处理进位即可. #include <iostream> #inc ...

  4. 信息学奥赛一本通 1307:【例1.3】高精度乘法 | 1174:大整数乘法 | OpenJudge NOI 1.13 09:大整数乘法

    [题目链接] ybt 1307:[例1.3]高精度乘法 ybt 1174:大整数乘法 OpenJudge NOI 1.13 09:大整数乘法 [题目考点] 1. 高精度 考察:高精乘高精 高精度计算讲 ...

  5. 信息学奥赛一本通(1174:大整数乘法)

    1174:大整数乘法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12480     通过数: 7002 [题目描述] 求两个不超过200位的非负整数的积. [ ...

  6. 大整数乘法--leetcode Multiply Strings

    大整数乘法 本文转载自http://www.cnblogs.com/TenosDoIt/p/3735309.html 我们在日常的大整数计算中,通常是把它转化为字符型计算.这道题的思路就和我们小学计算 ...

  7. python两数相乘代码_Python 实现大整数乘法算法的示例代码

    我们平时接触的长乘法,按位相乘,是一种时间复杂度为 O(n ^ 2) 的算法.今天,我们来介绍一种时间复杂度为 O (n ^ log 3) 的大整数乘法(log 表示以 2 为底的对数). 介绍原理 ...

  8. 计算机算法设计与分析 大整数乘法

    大整数乘法 问题描述 求两个不超过200位的非负整数的积. 输入形式 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出形式 一行,即相乘后的结果.结果里不能有多余的前导0,即如果结 ...

  9. Bailian2980 大整数乘法【大数】

    2980:大整数乘法 总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积. 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出 一 ...

最新文章

  1. php--------返回404状态
  2. C#中控件如何设置透明色
  3. Golang——数组遍历、最大值、求和、多维数组
  4. 超级棒的免费前端学习路线
  5. 四个变量的图表怎么做_PPT中的图表怎么做才高大上?4步帮你搞定!
  6. html5标签属性大全_HTML/HTML5 知识点思维导图
  7. LDA主题模型(算法详解)
  8. PHP如果某商品下的所有货品库存都为0,则下架该商品
  9. 组态王、力控、MCGS、瑞尔、杰控等国内组态软件一点看法
  10. 金山词霸2003/2005/2006词典丢失的解决方法
  11. 利用Github Pages搭建个人在线简历
  12. 微信小程序章节自测--6-7-8-9-有解析
  13. 前端面试—html语义化
  14. ||、、!的使用与区别
  15. flam3 ubuntu 依赖文件
  16. 计算机作文范文,未来计算机作文范文.docx
  17. (线性表)设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
  18. 计算机SCI 源代码,计算机类SCI检索源刊
  19. 零基础Vlog教程!
  20. 利用matlab绘制统计图,matlab绘制折线统计图

热门文章

  1. Altera Quartus 13.1 仿真工具路径错误问题解决 Can‘t launch the ModelSim-Altera software
  2. 邵阳一中2021高考成绩查询入口,邵阳高考成绩查询入口2021
  3. 两点间距离(结构体)
  4. ILRuntime | 学习概要
  5. 面试题 —— 前端如何进行SEO优化?
  6. Android中的枚举
  7. JavaSE学习笔记之Annotation(注解)
  8. 大咖Live | 视见医疗科技王少彬:宫颈癌放疗精准临床靶区勾画实战经验分享
  9. Koa中间件项目搭建,部署到linux服务器上
  10. C# 接口的实现与继承