最基础的方法,模拟竖式计算过程求结果。没有优化。受限于数组及内存上限。
代码如下:
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<b.length(); i++){
String be=""+barr[b.length()-i-1];
for (int j=0; j<a.length(); 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<Integer> reList = new ArrayList<Integer>();
//对竖式中间结果求和
for (int si=0;si<maxl;si++){
int ts=0;
for (int sj=0;sj<b.length();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<tsarr.length; 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语言(或相似语法的)代码。