如果仅仅是这题,不考虑扩展性问题,
//大数字加法计算用方法(返回数组)num1:数字1,num2:数字2,weishu:进位用位数
public static long[] bigNumSum(String num1,String num2,int weishu)
{
long[]numArray1=arrayChange(num1,weishu);
long[]numArray2=arrayChange(num2,weishu);
int length1=numArray1.length;
int length2=numArray2.length;
long[]result=null;
//谨慎起见,多放一位
if(length1>length2)
result=new long[length1+1];
else
result=new long[length2+1];
for(int i=0;i<length1;i++)
{
result[i]=numArray1[i];
}
for(int i=0;i<length2;i++)
{
result[i]=result[i]+numArray2[i];
result=jinwei(result, weishu);
}
return result;
}
//字符串转换到数组,num:可转换为数字的字符串,weishu:数组进位规则
public static long[] arrayChange(String num,int weishu)
{
int length=num.length();
int temp=(length/weishu)+1;
long[] numArray=new long[temp];
for(int i=0;i<temp;i++)
{
if(weishu*(i+1)-1<length)
numArray[i]=Long.valueOf(num.substring(weishu*i, weishu*(i+1)-1));
else
numArray[i]=Long.valueOf(num.substring(weishu*i, length));
}
long[]result=new long[temp];
//由于我的数组是从低位到高位的,
//即假如第10位进位的数组,数字是10000001002,数组结构实际上是1002,1,
//所以最后要反转一下
for(int i=0;i<temp;i++)
{
result[i]=numArray[temp-i-1];
}
return result;
}
//进位用方法:a:计算用的数组,weishu:多少位开始就进位
public static long[] jinwei(long[] a,int weishu)
{
int i=a.length;
long panduan=1;
for(int j=0;j<weishu;j++)
panduan=panduan*10;
for(int k=0;k<i-1;k++)
{
if(a[k]>=panduan)
{
a[k+1]=a[k+1]+a[k]/panduan;
a[k]=a[k]%panduan;
}
}
return a;
}
//打印结果用方法,a:计算用数组,weishu:多少位开始就进位
public static void printresult(long[] a,int weishu)
{
int i=a.length;
int index=0;
String[] result=new String[i];
for(int j=0;j<i;j++)
result[j]=String.valueOf(a[j]);
boolean iscanaddzero=false;
for(int j=i-1;j>=0;j--)
{
if(!iscanaddzero&&!result[j].equals("0"))
{
iscanaddzero=true;
continue;
}
if(result[j].length()<weishu&&j!=i-1&&!result[j].equals("0")&&iscanaddzero)
{
for(int k=0;k<weishu-result[j].length();k++)
result[j]="0"+result[j];
}
}
for(int j=i-1;j>=0;j--)
{
if(!result[j].equals("0"))
{
index=j;
break;
}
}
//需要补0的地方补0
for(int j=index-1;j>=0;j--)
{
if(result[j].equals("0"))
{
for(int k=0;k<weishu-1;k++)
result[j]=result[j]+"0";
}
}
for(int j=i-1;j>=0;j--)
{
if(!result[j].equals("0"))
System.out.print(result[j]);
}
}
然后再主方法里写下如下代码:
String temp1="42342348923840239840239840923842380";
String temp2="80948502350237598347598347589347507";
long[]resultArray=bigNumSum(temp1, temp2, 15);
printresult(resultArray, 15);
ps:temp1,temp2可以修改,不过我的方法比较简陋,只考虑了两个数都是正数的情况。