• java大数加法乘法


    java大数加法乘法

    前言

    正常情况下我们调用加法乘法使用符号就行了,但是如果超出限制了,那就只能调用BigDecimal里面的函数了,但是有的时候oj考察的就是希望自己实现,所以就可以采用别的方法。

    加法

    加法比较简单,直接字符串转置,差的位补0,然后一位一位加,最后注意进位。

      public static String add(String s1, String s2) {
        StringBuilder a = new StringBuilder(s1);
        StringBuilder b = new StringBuilder(s2);
        a.reverse();
        b.reverse();
    
        int m = a.length();
        int n = b.length();
        int max = Math.max(m, n);
        if (m < n) {
          for (int i = m; i < n; i++) {
            a.append('0');
          }
        } else {
          for (int i = n; i < m; i++) {
            b.append('0');
          }
        }
    
        int[] ans = new int[max + 1];
    
        for (int i = 0; i < max; i++) {
          ans[i] = (a.charAt(i) - '0') + (b.charAt(i) - '0');
        }
        for (int i = 0; i < max; i++) {
          ans[i + 1] += ans[i] / 10;
          ans[i] %= 10;
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < max; i++) {
          result.append(ans[i]);
        }
        if(ans[max]!=0)
        {
          result.append(ans[max]);
        }
        return result.reverse().toString();
      }
    

    乘法

    以12*12为例子,第1位的两个2相乘,结果应该放在第1位,是4,然后第一个数的1和第二个数的2相乘是2,应该是第二位,2+2,然后两个1相乘,1应该放在第3位,结果是144,这个没有进位,如果有进位需要遍历一下。

    public static String mul(String s1, String s2) {
        StringBuilder a = new StringBuilder(s1);
        StringBuilder b = new StringBuilder(s2);
        a.reverse();
        b.reverse();
    
        int m = a.length();
        int n = b.length();
    
        int[] ans = new int[m + n];
        for (int i = 0; i < m; i++) {
          for (int j = 0; j < n; j++) {
            ans[i + j] += (a.charAt(i) - '0') * (b.charAt(j) - '0');
          }
        }
    
        for (int i = 0; i < ans.length - 1; i++) {
          ans[i + 1] += ans[i] / 10;
          ans[i] %= 10;
        }
    
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < ans.length - 1; i++) {
          result.append(ans[i]);
        }
        return result.reverse().toString();
      }
    
  • 相关阅读:
    delphi 使用条件编译指令
    [转] 编程之道 二
    delphi中XLSReadWrite控件的使用(1)简介
    delphi中XLSReadWrite控件的使用(2)delphi XE下安装
    墙纸自动换1.4算法分析
    Delphi中设置屏幕分辨率
    delphistringgrid另类自动向下滚屏
    【Hex 格式文件操作】一、intel hex格式文件说明
    INTEL hex文件格式
    [转]编程之道 一
  • 原文地址:https://www.cnblogs.com/blogxjc/p/12345762.html
Copyright © 2020-2023  润新知