标签:
最近去某某公司面试,被问到的题:设计程序,实现两个大数据相加,可惜我没能答上,下来我写了一下,其实挺简单,代码实现如下:
public class Number {
private String str;
Number(String str){
this.str=str;
arr=new int[this.str.length()];
char[] cha=str.toCharArray();
for(int a=0;a<arr.length;a++){
arr[a]=Integer.parseInt(new StringBuffer().append(cha[a]).toString());
}
}
private int[] arr=null;
public int[] getArr(){
return arr;
}
/**
* 两数相加
* @param num 加数
* @return 两数的和
*/
public Number add(Number num){
//创建一个数组用来存储和的每一位的数字
int[] temp=new int[this.arr.length>num.arr.length?this.arr.length+1 : num.arr.length+1];
//将已有的数据复制一份,长度和temp一致。没数字的位子用0填充
int[] numarr=new int[temp.length];
System.arraycopy(num.getArr(), 0, numarr, numarr.length-num.getArr().length, num.getArr().length);
int[] thisarr=new int[temp.length];
System.arraycopy(this.getArr(), 0, thisarr, thisarr.length-this.getArr().length, this.getArr().length);
//十进制加法的算法,逢10进1
for(int a=temp.length-1;a>=0;a--){
if((numarr[a]+thisarr[a])>9){
temp[a]+=((numarr[a]+thisarr[a])-10);
temp[a-1]+=1;
}else{
temp[a]+=(numarr[a]+thisarr[a]);
}
}
//将temp转换为字符串。返回
StringBuffer sb=new StringBuffer();
for(int a=0;a<temp.length;a++){
sb.append(temp[a]);
}
if(temp[0]==0){
return new Number(sb.toString().substring(1, sb.length()));
}
return new Number(sb.toString());
}
}
标签:
原文地址:http://www.cnblogs.com/yx-my-life/p/4645335.html