用数组的方式实现,直接贴上代码:
/* * 大整数乘法 */ 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判断即可。