大数相加、大数相乘
发布时间:2020-12-14 04:06:42 所属栏目:大数据 来源:网络整理
导读:我们首先看大数相加,其基本思路是: ? ? ? ?过程和我们直接笔算思路一样,比如 ?129 + 23 ,先计算 9+3 = 12,则确定个位为2,同时向前进 1 ;继续 2 + 2 + 1 = 5,确定十位为5,同时向前进 0;继续 1 + 0 + 0 = 1,确定百位为1(其中该式中前一个0为12补齐的
我们首先看大数相加,其基本思路是:
? ? ? ?过程和我们直接笔算思路一样,比如 ?129 + 23 ,先计算 9+3 = 12,则确定个位为2,同时向前进 1 ;继续 2 + 2 + 1 = 5,确定十位为5,同时向前进 0;继续 1 + 0 + 0 = 1,确定百位为1(其中该式中前一个0为12补齐的0,后一个0为进位的0);结束 得到结果为152。代码如下: package pack1; public class Multiply { /** * @param 大数相加 */ public String add(String str1,String str2){ int jinwei = 0; StringBuffer sb1 = new StringBuffer(str1); sb1.reverse(); StringBuffer sb2 = new StringBuffer(str2); sb2.reverse(); int len1=sb1.length(),len2=sb2.length(),minLen = (len1>len2)?len2:len1; StringBuffer sb = new StringBuffer(""); for(int i=0;i<minLen;i++){ int single =Integer.parseInt(sb1.charAt(i)+"")+Integer.parseInt(sb2.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(len1==len2){ if(jinwei!=0) sb.append(jinwei); return sb.reverse().toString(); }else if(len1>len2){ for(int i=len2;i<len1;i++){ int single =Integer.parseInt(sb1.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(jinwei!=0) sb.append(jinwei); return sb.reverse().toString(); }else{ for(int i=len1;i<len2;i++){ int single =Integer.parseInt(sb2.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(jinwei!=0) sb.append(jinwei); return sb.reverse().toString(); } } public static void main(String[] args) { Multiply mul = new Multiply(); System.out.println(mul.add("8882488","123888234248888")); //使用BigInteger java.math.BigInteger big1 = new java.math.BigInteger("8882488"); java.math.BigInteger big2 = new java.math.BigInteger("123888234248888"); System.out.println(big1.add(big2).toString()); } } 大数相乘 大数相乘怎么做呢,比如计算129 * 23,算法思路为:将乘法变换为加法进行计算。首先取23的个位3,代表129需要相加3次;然后再取23的十位2,代表129需要相加2次,并且同时需要在乘以10,则可以得到最后的结果。代码如下: package pack1; public class Multiply { /** * @param 大数相加 */ public String add(String str1,minLen = (len1>len2)?len2:len1; StringBuffer sb = new StringBuffer(""); for(int i=0;i<minLen;i++){ int single =Integer.parseInt(sb1.charAt(i)+"")+Integer.parseInt(sb2.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(len1==len2){ if(jinwei!=0) sb.append(jinwei); return sb.reverse().toString(); }else if(len1>len2){ for(int i=len2;i<len1;i++){ int single =Integer.parseInt(sb1.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(jinwei!=0) sb.append(jinwei); return sb.reverse().toString(); }else{ for(int i=len1;i<len2;i++){ int single =Integer.parseInt(sb2.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(jinwei!=0) sb.append(jinwei); return sb.reverse().toString(); } } public String multiply(String str1,String str2){ int len1 = str1.length(); int len2 = str2.length(); String result = "0"; if(len1<len2){ //使得str2指向的字符串为较短的一个字符串 String temp = str1; str1 = str2; str2 = temp; len1 = str1.length(); len2 = str2.length(); } for(int i=1;i<=len2;i++){ String temp = "0"; int num = str2.charAt(len2-i) - '0'; for(int j=1;j<=num;j++) temp = add(temp,str1); for(int k=1;k<=i-1;k++) temp = temp + "0"; result = add(result,temp); } return result; } public static void main(String[] args) { Multiply mul = new Multiply(); System.out.println(mul.multiply("8882488","123888234248888")); //使用BigInteger java.math.BigInteger big1 = new java.math.BigInteger("8882488"); java.math.BigInteger big2 = new java.math.BigInteger("123888234248888"); System.out.println(big1.multiply(big2).toString()); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |