Java实现大数乘法运算

基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想)

即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。

实现代码如下:

1import java.util.Scanner; 2 3//创建类largenumberOperationMultiply 4public class largenumberOperationMultiply { 5 6 //定义方法multiply的功能 7 public String multiply(String str1,String str2){ 8 int[] num1 = new int[str1.length()]; 9 int[] num2 = new int[str2.length()]; 10 int[] result = new int[str1.length() + str2.length()]; 11 12 //将两个字符串转成整型数组,顺序转换,数组下标越小,数字对应的位数越高 13 for (int i = 0;i < str1.length(); i++){ 14 num1[i] = Integer.parseInt(str1.substring(i,i+1)); 15 } 16 for (int i = 0;i < str2.length(); i++){ 17 num2[i] = Integer.parseInt(str2.substring(i,i+1)); 18 } 19 20 //两大数相乘 21 for (int a = 0;a < str1.length(); a++){ 22 for (int b = 0;b < str2.length(); b++){ 23 result[a+b] += num1[a]*num2[b]; 24 } 25 } 26 27 ////判断是否需要进位,满10进1,因为存储顺序与位数高低相反,所以采用逆序进位 28 int temp; 29 for (int k = result.length-1; k > 0; k--){ 30 temp=result[k]/10; //数组下标大的向数组下标小的进位 31 result[k-1] += temp; 32 result[k] = result[k]%10; 33 } 34 35 //将结果数组逆序转化为字符串 36 String resultstr = ""; 37 for (int i = 0; i < result.length-1; i++){ 38 resultstr += "" + result[i]; 39 } 40 41 return resultstr; 42 } 43 44 public static void main(String[] args){ 45 Scanner sc = new Scanner(System.in); 46 System.out.println("请输入第一个数:"); 47 String str1 = sc.next(); 48 System.out.println("请输入第二个数:"); 49 String str2 = sc.next(); 50 largenumberOperationMultiply bn = new largenumberOperationMultiply(); 51 //创建类largenumberOperationMultiply的对象bn 52 String output = bn.multiply(str1,str2); 53 //bn对象调用multiply方法对str1和str2进行操作 54 System.out.println(str1+"与"+str2+"的积为="+output); 55 } 56}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

js 数组 转为树形结构

需要转换为树形的数组vardata{"orderById":null,"platformCommissionProportion":1,"name":"添加剂","pid":13,"id":26

Java开发者容易犯的十个错误

!(https://oscimg.oschina.net/oscnet/c9f00cc918684fbe8a865119d104090b.gif)Top1.数组转换为数组列表将数组转换为数组列表,开发者经常会这样做:\java\List<StringlistArrays.asList(arr);Arr