将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想)
即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。
图片说明

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        int[] arr1=new int[s.length()];
        for(int i=0;i<s.length();i++){
            arr1[i]=s.charAt(i)-'0';
        }

        int[] arr2=new int[t.length()];
        for(int i=0;i<t.length();i++){
            arr2[i]=t.charAt(i)-'0';
        }

        int len1=arr1.length;
        int len2=arr2.length;
       // 开辟结果数组,结果长度至多为 lenOne + lenTwo
        int[] result=new int[len1+len2];

        // 开始计算,先不考虑进位,每次结果存在result[i + j + 1]位置
        // 为什么是i + j + 1? 
        // 因为结果数组计算处理高位在数组左,低位在数组右。
        //i+j+1实际上是往低位存,这样后面进位处理才正确
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                result[i+j+1]+=arr1[i]*arr2[j];
            }
        }

        int carry=0;
        for(int i=result.length-1;i>=0;i--){
            int sum=carry+result[i];
            result[i]=sum%10;
            carry=sum/10;
        }

        // 转为String,需要无视前置0
        //如果最终res长度为0,则代表输入类似"0" "0"的用例,结果应该输出“0”
        StringBuffer res=new StringBuffer();
        int cur=0;
        while(cur<=result.length-1 && result[cur]==0){
            cur++;
        }
        for(int i=cur;i<result.length;i++){
            res.append(result[i]);
        }

        return res.length()==0 ? "0" : res.toString();
    }
}