[编程题] 大整数相乘

xiaoxiao2021-02-28  53

有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。 输入描述: 空格分隔的两个字符串,代表输入的两个大整数

输出描述: 输入的乘积,用字符串表示

输入例子1: 72106547548473106236 982161082972751393

输出例子1: 70820244829634538040848656466105986748

import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s = sc.nextLine(); String[] s1 = s.split(" "); System.out.println(multiply(s1[0],s1[1])); } } private static String multiply(String s1,String s2){ String res = ""; if(s1.length() == 0 || s2.length() == 0) return "0"; int len = s2.length(); StringBuilder temp = new StringBuilder(); for(int i = len - 1;i >=0;i--){ temp = multiplyCore(s1,s2.charAt(i)); for(int j =len-1-i;j>0;j--){ temp.append('0'); } res = add(res,temp.toString()); } return res; } private static StringBuilder multiplyCore(String s1,char c){ StringBuilder sb = new StringBuilder(); int jinwei = 0; int v = 0; for(int i = s1.length() - 1;i >= 0;i--){ v = (s1.charAt(i) - '0') * (c - '0')+ jinwei; jinwei = v / 10; v = v % 10; sb.insert(0,v); } if(jinwei > 0){ sb.insert(0,jinwei); } return sb; } private static String add(String s1,String s2){ int i = s1.length() - 1; int j = s2.length() - 1; int jinwei = 0; int v = 0; StringBuilder sb = new StringBuilder(); for(;i >= 0 && j>=0;i--,j--){ v = jinwei + (s1.charAt(i) - '0') + (s2.charAt(j) - '0') ; jinwei = v / 10; v = v % 10; sb.insert(0,v); } while(j >= 0){ v = jinwei + (s2.charAt(j) - '0') ; jinwei = v / 10; v = v % 10; sb.insert(0,v); j--; } while(i >= 0){ v = jinwei + (s1.charAt(i) - '0') ; jinwei = v / 10; v = v % 10; sb.insert(0,v); i--; } if(jinwei > 0){ sb.insert(0,jinwei); } return sb.toString(); } }
转载请注明原文地址: https://www.6miu.com/read-34706.html

最新回复(0)