java实现超大数加减乘除四则运算Word文档下载推荐.docx
《java实现超大数加减乘除四则运算Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java实现超大数加减乘除四则运算Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
*@paramnumStr1数1
*@paramnumStr2数2
*@return结果
publicstaticStringadd(StringnumStr1,StringnumStr2){
intnumLen1=numStr1.length();
intnumLen2=numStr2.length();
int[]numArray1=newint[numLen1];
//数字数组
int[]numArray2=newint[numLen2];
//"
12345"
->
[5,4,3,2,1]
for(inti=0;
i<
numLen1;
i++){
Stringc=numStr1.substring(i,i+1);
numArray1[numLen1-i-1]=Integer.parseInt(c);
//低位存字符串尾部数字
}
numLen2;
Stringc=numStr2.substring(i,i+1);
numArray2[numLen2-i-1]=Integer.parseInt(c);
intminLen=0;
//取长度小的数位数
intmaxLen=0;
//取长度大的数位数
int[]maxArray=null;
//长度大的数
if(numLen1<
numLen2){
minLen=numLen1;
maxLen=numLen2;
maxArray=numArray2;
}else{
minLen=numLen2;
maxLen=numLen1;
maxArray=numArray1;
int[]resultArray=newint[maxLen+1];
//考虑到可能会进位,多给一个元素空间
//两数长度相同的部分,同位相加,超出9进1
intadded=0;
inti=0;
for(;
minLen;
intt=numArray1[i]+numArray2[i]+added;
//两数相加,再加进位
if(t>
9){
added=1;
//进1
resultArray[i]=t-10;
//当前位计算结果
added=0;
//不进位
resultArray[i]=t;
//长度超出部分累加
maxLen;
intt=maxArray[i]+added;
//多余位数加上进位
resultArray[i]=added;
//最高位
//拼接结果[1,4,8,2,0]->
2841
StringBuilderbuilder=newStringBuilder();
for(intn=resultArray.length-1;
n>
=0;
n--){
//如果最高位为0,移除
if(n==resultArray.length-1&
&
resultArray[resultArray.length-1]==0){
continue;
//跳过
builder.append(resultArray[n]);
returnbuilder.toString();
*两非负整数相减
publicstaticStringsubtract(StringnumStr1,StringnumStr2){
//数值大的数
if(numLen1==numLen2){//等于
maxArray=getMaxNumber(numArray1,numArray2);
int[]minArray=maxArray==numArray1?
numArray2:
numArray1;
//数值小的数
int[]resultArray=newint[maxLen];
//大数-小数,同位相减,小于0借位
intsubtracted=0;
intt=maxArray[i]-minArray[i]-subtracted;
//两数相减,再减借位
if(t<
0){
subtracted=1;
//向高位借1,暂存起来
resultArray[i]=t+10;
//当前位计算结果(借1相当于借了10)
subtracted=0;
//不借位
//大数超出部分减掉借位
intt=maxArray[i]-subtracted;
//多余位数减掉借位
booleanhighBitNotEqualZero=false;
//存在高位不为0的情况,低位0保留
//如果高位为0,移除
if(resultArray[n]==0&
!
highBitNotEqualZero&
n!
=0){//高位无用的0去除
highBitNotEqualZero=true;
//找到不为0的位
if(maxArray==numArray1){//第一个数大或相等
}else{//第一个数小于第二个数,相减为负数
builder.insert(0,"
-"
);
*两非负整数相乘
publicstaticStringmultiply(StringnumStr1,StringnumStr2){
intminLen