前几天,朋友给我一道面试题。我看了看挺有意思的。原题如下:
刚碰到这道题的时候,一直在想怎么存,毕竟已经超过了int类型的存储,后来发现自己好蠢,其实可以还用string类型去存储。那么加法就变得简单多了,分成两个步骤:
一,加法运算,二,进制运算
加法运算如下:
/**
*
* 功能:大数字相加
* 参数:@param s1
* 参数:@param s2
* 作者:张双亮
* 日期:2018年11月10日 下午3:33:58
*/
private static byte[] BigSum(String params1, String params2){
byte[] s1 = params1.getBytes();
byte[] s2 = params2.getBytes();
int lenghtMax = 0;
int lenghtMin = 0;
lenghtMax = lenghtMin = s1.length;
byte[] tempMax = Arrays.copyOf(s1, lenghtMax);
byte[] tempMin = Arrays.copyOf(s1, lenghtMin);
if(s1.length > s2.length){
lenghtMin = s2.length;
tempMin = Arrays.copyOf(s2, lenghtMin);
}else{
lenghtMax = s2.length;
tempMax = Arrays.copyOf(s2, lenghtMax);
}
byte[] s3 = new byte[lenghtMax];
int reduce = lenghtMax - lenghtMin;
for(int j = 0; j < reduce; j++){
s3[j] = (byte)(tempMax[j] - 48);
}
for(int i = 0; i < lenghtMin; i++){
s3[i+reduce] = (byte) (tempMin[i] + tempMax[i+reduce] - 96);
}
return s3;
}
进制运算如下:
/**
*
* 功能:进制运算
* 参数:@param s
* 参数:@return
* 作者:张双亮
* 日期:2018年11月10日 下午4:19:11
*/
private static String BigDecimal(byte[] s){
for(int i = s.length-1; i >= 1; i--){
if(s[i] >= 10){
s[i] = (byte) (s[i] - 10);
s[i-1] = (byte) (s[i-1] + 1);
}
}
String str = "";
for(int i = 0; i < s.length; i++){
str += ""+s[i]+"";
}
return str;
}
然后就可以了。