/**
*Name:HighInteger.java
*Author:Richard
*Date:Apr-15,2006
*Version:1.0.0.0
*=====================
*use to caculate very great integer
*/
public class HighInteger{
protected int len;
protected int S[];
protected final int MAXLEN = 100;
/**
*construct method
*/
public HighInteger(){
len = 0;
S = new int[MAXLEN];
}
/**
*reload the construct method
*/
public HighInteger(int plen, int pS[]){
len = plen;
S = new int[MAXLEN];
for(int i=0; i<plen; i++)
S[plen-1-i] = pS[i];
}
/**
*set len of HighInteger
*/
public void setLen(int plen){
len = plen;
}
/**
*set array named S in HighInteger
*/
public void setS(int pS[]){
len = pS.length;
for(int i=0; i<pS.length; i++)
S[pS.length-1-i] = pS[i];
}
/**
*set the element of array named S in HighInteger
*index is between 0 and the len-1
*/
protected void setSElement(int index, int value){
S[index] = value;
}
/**
*set the element of array that used as interface
*index is between 1 and the len
*/
public void setElement(int index, int value){
S[this.getLen()-index] = value;
}
/**
*get len of HighInteger
*/
public int getLen(){
return len;
}
/**
*get the element of array named S in HighInteger
*index is between 0 and the len-1
*/
protected int getSElement(int index){
return S[index];
}
/**
*get the element of array that used as interface
*index is between 1 and the len
*/
public int getElement(int index){
return S[this.getLen()-index];
}
/**
*Add two great integer and return as HighInteger
*/
public static HighInteger HighIntegerAdd(HighInteger parm1, HighInteger parm2){
HighInteger result = new HighInteger();
result.setLen(parm1.getLen()>parm2.getLen() ? parm1.getLen() : parm2.getLen());
for(int i=0; i<result.getLen(); i++){
result.setSElement(i, result.getSElement(i)+parm1.getSElement(i)+parm2.getSElement(i));
if(result.getSElement(i) >=10){
result.setSElement(i, result.S[i]-10);
result.setSElement(i+1, result.getSElement(i+1)+1);
}
}
if(result.getSElement(result.getLen())>=1)
result.setLen(result.getLen()+1);
return result;
}
/**
*Minus two great integer and return as HighInteger
*/
public static HighInteger HighIntegerMinus(HighInteger parm1, HighInteger parm2){
HighInteger result = new HighInteger();
int len = parm1.getLen();
result.setLen(len);
for(int i=0; i<len; i++){
result.setSElement(i, result.getSElement(i)+parm1.getSElement(i)-parm2.getSElement(i));
if (result.getSElement(i)<0){
result.setSElement(i, result.getSElement(i)+10);
result.setSElement(i+1, result.getSElement(i+1)-1);
}
}
while((len>1) && (result.getSElement(len)>=1)) len--;
result.setLen(len);
return result;
}
/**
*Multi two great integer and return as HighInteger
*/
public static HighInteger HighIntegerMulti(HighInteger parm1, HighInteger parm2){
HighInteger result = new HighInteger();
int len = parm1.getLen()+parm2.getLen();
for(int i=0; i<parm1.getLen(); i++){
for(int j=0; j<parm2.getLen(); j++){
result.setSElement(i+j, result.getSElement(i+j)+parm1.getSElement(i)*parm2.getSElement(j));
result.setSElement(i+j+1, result.getSElement(i+j)/10);
result.setSElement(i+j, result.getSElement(i+j)%10);
}
}
while((len>1) && (result.getSElement(len)>=1)) len--;
result.setLen(len);
return result;
}
/**
*print the great integer
*/
public void printHighInteger(){
for(int i=this.getLen()-1; i>=0; i--)
System.out.print(S[i]);
System.out.println();
}
};
//==========End Class HighInteger==========