用数组的方式实现,直接贴上代码:
/*
* 大整数乘法
*/
public class Demo9 {
static int N=100;
static int a[]=new int[N];
static int b[]=new int[N];
static int c[]=new int[2*N];
static String s1=new String();
static String s2=new String();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo9 demo=new Demo9();
demo.Input();
demo.Multiply(a, b, c);
demo.Output();
}
private void Output() {
System.out.println("result=");
int flag=2*N-1;
while(c[flag]==0) {
if(flag==0) {
System.out.println("0");
return ;
}
flag--;
}
for(int i=flag;i>=0;i--) {
System.out.print(c[i]);
}
System.out.println("");
}
private void Multiply(int a[],int b[],int c[]) {
//逐个相乘
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
c[i+j]+=a[i]*b[j];
}
}
//移位、进位
for(int i=0;i<2*N-1;i++) {
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
private void Input() {
Scanner scanner=new Scanner(System.in);
System.out.println("input two big data:");
s1=scanner.nextLine();
s2=scanner.nextLine();
GetDigit(s1, a);
GetDigit(s2, b);
}
private static void GetDigit(String s,int a[]) {
int len=s.length();
for(int i=0;i<len;i++) {
a[len-1-i]=s.charAt(i)-'0';
}
//test
// System.out.println("test:");
// for(int i=0;i<N;i++) {
// System.out.print(a[i]);
// }
// System.out.println();
//
}
}
举个例子:
123456*987654321
输入的字符串转换成int型数组a:654321
输入的字符串转换成int型数组b:123456789
逐位相乘+累加计算到数组c中,最后该进位的进位,由于每个位置最大是81,所以只需除以10判断即可。
完全还原了手动计算乘法的步骤,先把属于每个位(个位,十位…)的所有数都加起来,再进位。