大数运算

乘法:

思路:用一个长度为两个字符串长度和的数组保存两个字符串下标的值(在新的数组中的下标就是这两个下标的和)相乘的结果,然后再第0位往后做进位处理,取余保存为当前位的值,去商加到下一位的值中,继续做相同的处理。

public String multiply(String num1,String num2) {
        num1=new StringBuilder(num1).reverse().toString();
        num2=new StringBuilder(num2).reverse().toString();
        int[] result=new int[num1.length()+num2.length()];
        for(int i=0;i<num1.length();i++) {
            int a=num1.charAt(i)-'0';
            for(int j=0;j<num2.length();j++) {
                int b=num2.charAt(j)-'0';
                result[i+j]+=a*b;
            }
        }
        StringBuilder res=new StringBuilder();
        for(int i=0;i<result.length-1;i++) {
            int dig=result[i]%10;
            int carry=result[i]/10;
            result[i+1]+=carry;
            res.insert(0,dig);
        }
        if(result[result.length-1]!=0) 
                   res.insert(0,result[result.length-1]);
           return res.toString();
}

 加法,比乘法简单很多

public String Add(String num1,String num2) {
        num1=new StringBuilder(num1).reverse().toString();
        num2=new StringBuilder(num2).reverse().toString();
        int length=num1.length()>num2.length()?num1.length():num2.length();
        int offset=num1.length()-num2.length();
        if(offset>=0) {
            while(offset-->0) {
                num2+="0";
            }
        }
        else
        {
            int temp=-offset;
            while(temp-->0) {
                num1+="0";
            }
        }
        int[] result=new int[length];
        for(int i=0;i<result.length;i++) {
            result[i]=num1.charAt(i)-'0'+num2.charAt(i)-'0';
        }
        StringBuilder res=new StringBuilder();
        for(int i=0;i<result.length-1;i++) {
            int dig=result[i]%10;
            int carry=result[i]/10;
            result[i+1]+=carry;
            res.insert(0,dig);
        }
        if(result[result.length-1]!=0) 
                   res.insert(0,result[result.length-1]);
           return res.toString();
     }

 

posted @ 2019-03-28 09:56  LeeJuly  阅读(168)  评论(0)    收藏  举报