码迷,mamicode.com
首页 > 编程语言 > 详细

面试那些事-用数组实现十进制数的相加

时间:2015-07-14 15:16:52      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

最近去某某公司面试,被问到的题:设计程序,实现两个大数据相加,可惜我没能答上,下来我写了一下,其实挺简单,代码实现如下:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!