大数乘法(最基本方法)

最基础的方法,模拟竖式计算过程求结果。没有优化。受限于数组及内存上限。

代码如下:

import java.util.ArrayList;
import java.util.List;

public class Testd {
 public static void main(String[] args) throws Exception{
  String res = getPlus("99999","99999");
  System.out.println(res);
 }
 /**
  * 大数乘法
  * @param a 乘数
  * @param b 被乘数
  * @return
  * @throws Exception
  */
 public static String getPlus(String a, String b) throws Exception{
  String result="";
  char aarr[] = a.toCharArray();
  char barr[] = b.toCharArray();
  String add[][] = new String[b.length()][a.length()+b.length()];//竖式计算过程中的数字
  for (int i=0; i    String be=""+barr[b.length()-i-1];
   for (int j=0; j     String ae=""+aarr[a.length()-j-1];
    String sube=String.valueOf(Integer.parseInt(ae)*Integer.parseInt(be));
    if (add[i][a.length()+b.length()-j-1-i]==null||"".equals(add[i][a.length()+b.length()-j-1-i])){
     add[i][a.length()+b.length()-j-1-i]="0";
    }

    //按位乘法
    add[i][a.length()+b.length()-j-1-i]=String.valueOf(
      Integer.parseInt(add[i][a.length()+b.length()-j-1-i])
      +Integer.parseInt(sube.substring(sube.length()-1,sube.length())));
    if (sube.length()>1){
     add[i][a.length()+b.length()-j-2-i]=sube.substring(0,1);
    }else{
     add[i][a.length()+b.length()-j-2-i]="0";
    }
   }
  }
  int maxl=a.length()+b.length();
  List reList = new ArrayList();

  //对竖式中间结果求和
  for (int si=0;si    int ts=0;
   for (int sj=0;sj     if (add[sj][maxl-si-1]!=null&&!"".equals(add[sj][maxl-si-1])){
     ts+=Integer.parseInt(add[sj][maxl-si-1]);
    }
   }
   String tsstr=String.valueOf(ts);
   char tsarr[]=tsstr.toCharArray();
   while(reList.size()<(si+tsarr.length)){
    reList.add(0);
   }
   int adding=0;

   //处理求和中产生的进位
   for (int tssi=0; tssi     int tmps=reList.get(si+tssi)+Integer.parseInt(""+tsarr[tsarr.length-tssi-1])+adding;
    reList.set(si+tssi, tmps%10);
    adding=tmps/10;
   }
   if (adding!=0){
    reList.add(adding);
   }
  }

  //合并求和结果
 int reben=reList.size()-1;

 //去除开始部分的0
  while (reList.get(reben)==0){
   reben--;
  }
  for (int rei=reben;rei>=0;rei--){
   result+=reList.get(rei);
  }  return result;
 }
}

以上代码是JAVA版本,使用的是基本类型,可以很容易改成C语言(或相似语法的)代码。

你可能感兴趣的:(未分类文章)