大数运算

leetcode 415. 字符串相加

StringBuilder sb = new StringBuilder();
        int carry = 0;
        /** i >= 0 || j >= 0   只要有一个城里就继续,不成立的地方默认为0 继续进行加法 */
        for (int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0; i--, j--) {

            /** x不符合条件  默认值为0 */
            int x = 0;
            if (i < 0) {
                x = 0;
            } else {
                x = num1.charAt(i) - '0';
            }

            /** y不符合条件 默认值为0 */
            int y = 0;
            if (j < 0) {
                y = 0;
            } else {
                y = num2.charAt(j) - '0';
            }
            /** carry 作为进位的值  计算结果 */
            carry = x + y + carry;
            /** 把求余的结果,放入StringBuilder中 */
            sb.append(carry % 10);
            /** 把取整结果作为进位的值 */
            carry = carry / 10;
        }
        if (carry != 0) {
            sb.append(carry);
        }

        return sb.reverse().toString();

大整数乘法

leetcode 43. 字符串相乘

public static void main(String[] args) {
//        String num1 = "123";
//        String num2 = "456";
        String num1 = "0";
        String num2 = "0";
        String multiply = multiply(num1, num2);
        System.out.println(multiply);
    }

    /**
     * 计算形式
     * num1
     * x num2
     * ------
     * result
     */
    public static String multiply(String num1, String num2) {
        int length=num1.length()+num2.length();
        int[] arrNew=new int[length];
        for(int i=num2.length()-1;i>=0;i--){
            for(int j=num1.length()-1;j>=0;j--){
                /** 记录高位的位置 */
                int p1=i+j;
                /** 记录低位的位置 */
                int p2=i+j+1;
                int num=(num2.charAt(i)-'0')*(num1.charAt(j)-'0')+arrNew[p2];
                arrNew[p1]+=num/10;
                arrNew[p2]=num%10;
            }
        }
        StringBuilder sb=new StringBuilder();

        int k=0;
        int i=0;
        for(i=0;i<arrNew.length;i++){
          if(arrNew[i]!=0){
              k=i;
              break;
          }
        }
        if(k==0&& i==arrNew.length){
            return "0";
        }

        for(int j=k;j<arrNew.length;j++){
            sb.append(arrNew[j]);
        }

        String result = sb.toString();
        if(result==null || "".equals(result)){
            return "0";
        }
        return result;
    }

参考:

1.https://leetcode-cn.com/submissions/detail/42727500/

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读