java中2个大数相乘(不使用BigInteger)

public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(arrayFormat(multi("123","123")));
	}
	public static int[] multi(String s1 ,String s2){  //s1   s2     123
		char[] sChar1 = s1.toCharArray();  //把String型转成char数组   s1[2] s1[1] s2[0]
		char[] sChar2 = s2.toCharArray();  //                         3     2     1    
	
		int len =sChar1.length + sChar2.length;
		int array[] = new int[len];
	
		for(int i = 0 ; i < sChar2.length ; i++){     //根据乘法规则按位相乘 加在对应的位置上(*char数组位置是反的)
			for(int j = 0 ; j < sChar1.length ; j++){
				array[i+j] += (sChar2[sChar2.length-1-i]-48)*(sChar1[sChar1.length-1-j]-48);
			}
		}
		
		for(int i = 0 ; i < array.length-1 ; i++){   //把有些该进位的地方进位
			array[i+1] +=array[i]/10;
			array[i] = array[i]%10;	
		}
		return array;
	} 
	public static String arrayFormat(int [] array){   //把array转换成String 暂时位考虑首位上面的0
		StringBuilder sBuilder = new StringBuilder("");
		for(int i = array.length ; i >0; i--){
			sBuilder.append(array[i-1]);
		}
		return sBuilder.toString();
	}


你可能感兴趣的:(大数相乘)