アルゴリズム2-大数乗算

1985 ワード


import java.io.*;


//     
class IntString {
	public int len;
	public int[] digits;

	public IntString() {
		len = 0;
		digits = null;
	}
}

//     
public class BigInt {
	public BigInt() {
	}

	public static void main(String[] args) throws java.io.IOException {
		System.out.println("Input two large integers:");
		
		IntString intt1 = new IntString();
		IntString intt2 = new IntString();
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		//           
		String str[] = (reader.readLine()).split("\\s+");
		intt1.digits = convert(str[0]);
		intt1.len = str[0].length();
		intt2.digits = convert(str[1]);
		intt2.len = str[1].length();
		int[] a = intt1.digits;
		int[] b = intt2.digits;
		int alength = intt1.len;
		int blength = intt2.len;
		
		IntString intt3 = new IntString();
		intt3.len = alength + blength - 1;
		int clength = intt3.len;
		int[] c = new int[1000];
		
		for (int i = 0; i < alength; i++)
			for (int j = 0; j < blength; j++)
				c[i + j] += a[i] * b[j];
		for (int i = 0; i < c.length; i++) {
			if (c[i] > 9) {
				c[i + 1] += c[i] / 10;
				c[i] = c[i] % 10;
			}
		}
		intt3.digits = c;
		clength = intt3.len;
		System.out.println(clength);
		System.out.println("the result is: ");
		for (int i = clength - 1; i >= 0; i--) {
			System.out.print(c[i]);
		}
	}

	//      
	public static int[] convert(String str) {
		int length = str.length();
		int[] tem = new int[length];
		for (int i = 0; i < str.length(); i++) {
			tem[i] = str.charAt(length - i - 1) - '0';
		}
		return tem;
	}
}