java 整数乘法的算法,算法3:计算超大数字整数乘法

还不能处理负数和小数点

4f1150b881333f12a311ae9ef34da474.pngpackages1;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.Stack;

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.Vector;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif/** *//**d18c02628675d0a2c816449d98bda930.png * A multiply simulation

d18c02628675d0a2c816449d98bda930.png * for example : 

d18c02628675d0a2c816449d98bda930.png * 56 X 67 = 

d18c02628675d0a2c816449d98bda930.png *

d18c02628675d0a2c816449d98bda930.png *     56

d18c02628675d0a2c816449d98bda930.png *   x 67

d18c02628675d0a2c816449d98bda930.png * ----------

d18c02628675d0a2c816449d98bda930.png *    392

d18c02628675d0a2c816449d98bda930.png *   336

d18c02628675d0a2c816449d98bda930.png *------------

d18c02628675d0a2c816449d98bda930.png *   3752

d18c02628675d0a2c816449d98bda930.png *

d18c02628675d0a2c816449d98bda930.png * So ,in this way,We can calculation very very big number,for example: 299^133 etc. 

d18c02628675d0a2c816449d98bda930.png * 

d18c02628675d0a2c816449d98bda930.png *@authorUrashima 

d18c02628675d0a2c816449d98bda930.png *

8f1ba5b45633e9678d1db480c16cae3f.png*/1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassBigNumberMultiplyextendsBaseNumberOperation9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png//each array indicates a paramd18c02628675d0a2c816449d98bda930.pngprivateInteger[] paramFirst,paramSecond;

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png//main method97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString calculate(String param1,String param2)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        paramFirst=convert(param1);

d18c02628675d0a2c816449d98bda930.png        paramSecond=convert(param2);

d18c02628675d0a2c816449d98bda930.png//multiply each bit,from low to highd18c02628675d0a2c816449d98bda930.pngintindexFirst=paramFirst.length-1;

d18c02628675d0a2c816449d98bda930.pngintindexSecond=paramSecond.length-1;

d18c02628675d0a2c816449d98bda930.png//multiply results for each bitd18c02628675d0a2c816449d98bda930.pngVectorbranchResults=newVector();

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(;indexSecond>-1;indexSecond--)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            branchResults.add(branchMultiply(paramFirst,paramSecond[indexSecond]));

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png        String finalResult=branchAddTogether(branchResults);

d18c02628675d0a2c816449d98bda930.pngreturnfinalResult;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifprivateInteger[] branchMultiply(Integer[] upper,Integer down)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        Stackresults=newStack();

d18c02628675d0a2c816449d98bda930.png//todo : all core gose hered18c02628675d0a2c816449d98bda930.pngintcarryFlag=0;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(intindex=upper.length-1;index>-1;index--)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngintr1=down;

d18c02628675d0a2c816449d98bda930.pngintr2=upper[index];

d18c02628675d0a2c816449d98bda930.pngintr0=r1*r2+carryFlag;

d18c02628675d0a2c816449d98bda930.png            carryFlag=(int)(r0/10);

d18c02628675d0a2c816449d98bda930.pngintr3=r0-(10*carryFlag );

d18c02628675d0a2c816449d98bda930.pngif(index!=0)

d18c02628675d0a2c816449d98bda930.png                results.push(r3);

d18c02628675d0a2c816449d98bda930.pngelsed18c02628675d0a2c816449d98bda930.png                  results.push(r0);    

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png//sorts out and returnd18c02628675d0a2c816449d98bda930.pngInteger[] branchResult=newInteger[results.size()];

d18c02628675d0a2c816449d98bda930.png        results.toArray(branchResult);

d18c02628675d0a2c816449d98bda930.png//System.out.println (branchResult.toString());d18c02628675d0a2c816449d98bda930.pngreturnbranchResult;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png        

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifprivateString branchAddTogether(Vectorv)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        Vectorparams=newVector();

d18c02628675d0a2c816449d98bda930.png//TODO: fix bug#001d18c02628675d0a2c816449d98bda930.pngintbi=0;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(Integer[] pps : v)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//revers ppsd18c02628675d0a2c816449d98bda930.pngInteger[] rpps=newInteger[pps.length];

d18c02628675d0a2c816449d98bda930.png            System.arraycopy(pps,0,rpps,0,pps.length);

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(intk=pps.length-1; k>-1; k--)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png                rpps[pps.length-1-k]=pps[k];

ecedf933ec37d714bd4c2545da43add2.png            }d18c02628675d0a2c816449d98bda930.png            v.set(bi++,rpps);

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png//sort out data,add increamental 0 to each bit97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(Integer[] ii : v)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            String pa="";

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(Integer i : ii)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png                pa+=i;

ecedf933ec37d714bd4c2545da43add2.png            }d18c02628675d0a2c816449d98bda930.png            params.add(pa);

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.pngintincr=0;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(intidx=0; idx{

d18c02628675d0a2c816449d98bda930.png            String s=params.get(idx);

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(inti=0; i{

d18c02628675d0a2c816449d98bda930.png                s+="0";

ecedf933ec37d714bd4c2545da43add2.png            }d18c02628675d0a2c816449d98bda930.png            params.set(idx,s);

d18c02628675d0a2c816449d98bda930.png//System.out.println (s);d18c02628675d0a2c816449d98bda930.pngincr++;

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png//convert back to int[]97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(inti=0; i{

d18c02628675d0a2c816449d98bda930.png            String ctt=params.get(i);

d18c02628675d0a2c816449d98bda930.png//System.out.println (ctt);d18c02628675d0a2c816449d98bda930.pngv.set(i,convert(ctt));

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png//add them togetherd18c02628675d0a2c816449d98bda930.pngStackresult;

d18c02628675d0a2c816449d98bda930.png//trim right and addd18c02628675d0a2c816449d98bda930.pngresult=trimRightAdd(v);

d18c02628675d0a2c816449d98bda930.png        StringBuffer sb=newStringBuffer();

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngwhile(true)

d18c02628675d0a2c816449d98bda930.png             sb.append(result.pop());

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        }catch(Exception e)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//pass,ignore.ecedf933ec37d714bd4c2545da43add2.png}d18c02628675d0a2c816449d98bda930.pngreturnsb.toString();    

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png        

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifprivateStacktrimRightAdd(Vectorparams)9b8a8a44dd1c74ae49c20a7cd451974e.png{    

d18c02628675d0a2c816449d98bda930.png        Stackresult=newStack();

d18c02628675d0a2c816449d98bda930.pngintcarry=0;

d18c02628675d0a2c816449d98bda930.pngintmaxBit=0;

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//todo:maxbit97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(Integer[] i : params)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngintil=i.length;

d18c02628675d0a2c816449d98bda930.png            maxBit=il>maxBit?il:maxBit;

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png//bit moving , from low to higthd18c02628675d0a2c816449d98bda930.pngintindexDecreaseCount=1;

d18c02628675d0a2c816449d98bda930.pngintcolumnValue=0;

d18c02628675d0a2c816449d98bda930.pngintbitValue=0;    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(intk=0; k{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(k>0)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png             result.push(bitValue);

d18c02628675d0a2c816449d98bda930.png             columnValue=0;

d18c02628675d0a2c816449d98bda930.png             bitValue=0;

ecedf933ec37d714bd4c2545da43add2.png         }d18c02628675d0a2c816449d98bda930.png//value of each column,including carryd18c02628675d0a2c816449d98bda930.pngintnum=0;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(Integer[] param : params)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngintindex=param.length-indexDecreaseCount;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png                 num=param[index];

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif             }catch(Exception e)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png                 num=0;

ecedf933ec37d714bd4c2545da43add2.png             }d18c02628675d0a2c816449d98bda930.png//TODO: may be simulation calculate is better hered18c02628675d0a2c816449d98bda930.pngcolumnValue+=num;

ecedf933ec37d714bd4c2545da43add2.png         }d18c02628675d0a2c816449d98bda930.png//first bit97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(k!=maxBit-1)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png             columnValue+=carry;

d18c02628675d0a2c816449d98bda930.png             carry=(int)(columnValue/10);

d18c02628675d0a2c816449d98bda930.png             bitValue=columnValue-(10*carry );

d18c02628675d0a2c816449d98bda930.png             indexDecreaseCount++;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif         }else9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png             columnValue+=carry;

d18c02628675d0a2c816449d98bda930.png             result.push(columnValue);

ecedf933ec37d714bd4c2545da43add2.png         }ecedf933ec37d714bd4c2545da43add2.png       }d18c02628675d0a2c816449d98bda930.pngreturnresult;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

8f1ba5b45633e9678d1db480c16cae3f.png}测试计算结果

4f1150b881333f12a311ae9ef34da474.pngpackages1;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassDemo9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.pngprivateTwoNumberOperation operatorMultiply=newBigNumberMultiply();

d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidmultiplyDemo(String param1,String param2)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        String result=operatorMultiply.calculate(param1,param2);

d18c02628675d0a2c816449d98bda930.png        System.out.println (param1+"x"+param2+"="+result);

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticvoidmain (String[] args)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        Demo demo=newDemo();

d18c02628675d0a2c816449d98bda930.png        demo.multiplyDemo("12","12");

d18c02628675d0a2c816449d98bda930.png        demo.multiplyDemo("56","67");

d18c02628675d0a2c816449d98bda930.png        demo.multiplyDemo("3459398","11667278");

d18c02628675d0a2c816449d98bda930.png        demo.multiplyDemo("9283736253829832323432342342543654576343534564353734534534534534534553773453453453453453455377345345345345345345537734534534534534534553773453453453453453455377345345345345345345537734534534534534534553745645545",

d18c02628675d0a2c816449d98bda930.png"23470926947345345345345345345537734534534534534534553773453453453453453455377345345345345345345537734534534534534534553773453453453453453455377345345345345345345537734534534534534534553773453453453453453455377345345345345345345537863053758734076407083760987207345345345345345345537693709479");

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

8f1ba5b45633e9678d1db480c16cae3f.png}

--------------------Configuration: --------------------

12 x 12 = 144

56 x 67 = 3752

3459398 x 11667278 = 40361758178644

9283736253829832323432342342543654576343534564353734534534534534534553773453453453453453455377345345345345345345537734534534534534534553773453453453453453455377345345345345345345537734534534534534534553745645545 x 23470926947345345345345345345537734534534534534534553773453453453453453455377345345345345345345537734534534534534534553773453453453453453455377345345345345345345537734534534534534534553773453453453453453455377345345345345345345537863053758734076407083760987207345345345345345345537693709479 = 217897895412061538535213749538424917178427642790309526149197050342787946552594940694811082625513148107368458788645637103672066743646902872289253339664141494118086813947265391829794894470256056436951017797373234350763998817946444452982381515332165838866556971112151531240855136817304521889160157930869290050844235614446072972714978233006835557537630008993034139267140464023218920328137852716504553853724234899138660678581541565601300563516326950021051186577024411324340905167953542819936071934540621055

Process completed.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值