大数相乘

    xiaoxiao2025-06-11  39

    2019年5月26日

    大数相乘前言思路关于两个大数的乘法完整的代码值得注意的知识点

    大数相乘

    题目:有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。 例子: 输入 :72106547548473106236 982161082972751393 输出:70820244829634538040848656466105986748

    前言

    今天值得记录的小事: (1) 第一次吃日料,39块一碗的豚骨面,有点贵,里面也没啥肉,不过味道不错! (2) 和大学舍友去看了七龙珠,还不错。悟空真的是强的变态,性格还是和以前一样,沉稳中带着调皮。

    思路

    本题的思路其实很直接就是把两个数的乘法用代码模拟出来!思路简单,做起来还是很难的!!!

    关于两个大数的乘法

    主要方法: (1)将每一位做乘法,然后对应相加。此时不考虑进位。用数组来存储这些值,记得第一个数从数组的第二个位置开始存,因为第一个位置要考虑到进位。 (2)单独考虑进位

    完整的代码

    import java.util.Scanner; /* * 题目:大整数相乘 * 用两个字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。 * */ public class mianshiti3 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); String num1=scan.nextBigDecimal().toString(); String num2=scan.nextBigDecimal().toString(); StringBuffer sb=new StringBuffer(); int len1=num1.length(); int len2=num2.length(); int [] arr1=new int [len1]; int [] arr2=new int [len2]; for(int i=0;i<len1;i++) { arr1[i]=Integer.parseInt(num1.charAt(i)+""); } for(int i=0;i<len2;i++) { arr2[i]=Integer.parseInt(num2.charAt(i)+""); } int [] arr3=new int [len1+len2]; /*两个大数相乘的算法 * 9 8 * * 2 1 * -------------- * 9 8 * 18 16 * --------------- * 18 25 8 * 先不进位,最后一步进位 */ for(int i=0;i<arr1.length;i++) { for(int j=0;j<arr2.length;j++) { arr3[i+j+1]=arr3[i+j+1]+arr1[i]*arr2[j]; } } //单独表示进位 for(int i=arr3.length-1;i>0;i--) { if(arr3[i]>=10) { arr3[i-1]=arr3[i-1]+arr3[i]/10; arr3[i]=arr3[i]; } } for(int i=0;i<arr3.length;i++) { if(i==0&&arr3[i]==0) { continue; } sb.append(arr3[i]); } System.out.print(sb); } }

    值得注意的知识点

    (1)用Scanner读取大的整数的方法:scan.nextBigDecimal().toString(); (2)数组的第一个位置可能为0,要考虑进去,比如12*34,就可能输出0408,结果是不正确的!

    最新回复(0)