private static char[] add(char[] number1, char[] number2) {
		int sumLen = (number1.length>number2.length)?number1.length+1:number2.length+1;
		
		char[] sum = new char[sumLen];
		char[] reversedNumber1 = reverse(number1);
		char[] reversedNumber2 = reverse(number2);
		
		int carry = 0;
		int i = 0;
		for(;i<reversedNumber1.length&&i<reversedNumber2.length;i++) {
			int num1 = reversedNumber1[i]-'0';
			int num2 = reversedNumber2[i]-'0';
			int tmpSum = num1+num2+carry;
			if(tmpSum>=10) {
				carry = 1;
				tmpSum = tmpSum%10;
			} else {
				carry = 0;
			}
			sum[i] = Integer.toString(tmpSum).charAt(0);
		}
		
		while(i<reversedNumber1.length) {
			int num1 = reversedNumber1[i]-'0';
			int tmpSum = num1+carry;
			if(tmpSum>=10) {
				carry = 1;
				tmpSum = tmpSum%10;
			} else {
				carry = 0;
			}
			sum[i++] = Integer.toString(tmpSum).charAt(0);
		}
		 
		while(i<reversedNumber2.length) {
			int num2 = reversedNumber2[i]-'0';
			int tmpSum = num2+carry;
			if(tmpSum>=10) {
				carry = 1;
				tmpSum = tmpSum%10;
			} else {
				carry = 0;
			}
			sum[i++] = Integer.toString(tmpSum).charAt(0);
		}
		
		if(carry > 0) {
			sum[i] = '1';
		}
		
		return reverse(sum);
	}