Tuesday, July 19, 2011

resolved handler for very large integers. Here is the code.

package EZ;
import java.util.ArrayList;
public class large {
 ArrayList<Integer> value;
public large(String s1){
value = changer(s1);
}
public  ArrayList<Integer> getVal(){
return value;
}
public static ArrayList<Integer> changer(String s1){
ArrayList<Integer> temp = new ArrayList<Integer>();
for(int i=0;i<s1.length();i++){
int tempp = Integer.valueOf(s1.substring(i,i+1));
temp.add(tempp);
}
return temp;
}
public static ArrayList<Integer> addTwo(large l1,large l2){
int larger =0;
int checkto = 0;
int diff = 0;
ArrayList<Integer> sum = new ArrayList<Integer>();
System.out.println(l1.getVal().size() + " " + l2.getVal().size());
if(l1.getVal().size() > l2.getVal().size()){
System.out.println("l1 is bigger");
larger = 1;
checkto = l2.getVal().size();
diff = l1.getVal().size() - l2.getVal().size();
}
if(l1.getVal().size() < l2.getVal().size()){
System.out.println("l2 is bigger");
larger = 2;
checkto = l1.getVal().size();
diff = l2.getVal().size() - l1.getVal().size();
}
System.out.println(larger + " " + checkto + "  " + diff);
switch (larger){
case 0: break;
case 1: for(int j=0;j<diff;j++){
sum.add(l1.getVal().get(0));
l1.getVal().remove(0);
} printer(l1.getVal());
case 2: for(int k=0;k<diff;k++){
sum.add(l2.getVal().get(0));
System.out.println(l2.getVal().get(0) + "Deleted");
l2.getVal().remove(0);
} printer(l2.getVal());
System.out.println(sum);
}
for(int i=0;i<checkto;i++){
sum.add(l1.getVal().get(i) + l2.getVal().get(i));
}
for(int l=sum.size()-1;l>=0;l--){
System.out.println(sum.get(l));
if(sum.get(l) >9 && l!=0){
sum.set(l,sum.get(l)%10);
sum.set(l-1,sum.get(l-1)+1);
}
else if(sum.get(l) >9 && l==0){
sum.set(l,sum.get(l%10));
sum = addTen(sum);
}
}
return sum;
}
public static ArrayList<Integer> addTen(ArrayList<Integer> A1){
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(1);
for(int i=0;i<A1.size();i++){
temp.add(A1.get(i));
}
return temp;
}
public static void printer(ArrayList<Integer> A1){
for(int i=0;i<A1.size();i++){
System.out.print(A1.get(i));
}
System.out.println("\n");
}
public static void main(String[]args){
large one = new large("23562134");
large two = new large("3245623945112341");
printer(addTwo(one,two));
//22455390246824682468
//    3357539024682468
}
}

I really need to go over constructors and shit like that. apparently it changes EVERYTHING. I'm having a deja vu with this...
Working on a large number handler for Java. to handle number that exceed 2^63-1, the limit for long. Project Euler evidently is obsessed with handing these problems out.