zoukankan      html  css  js  c++  java
  • 大整数乘法之模拟笔算法

    emm算法设计书上讲了个基于递归分治法的一个方法,大概思路就是把比如两位数的乘法需要4次乘法运算变成只需要2次。emm我感觉一般还没大到要分治法来什么吧,就直接写了个模拟笔算的方法。

    看代码:

    package www.com.leetcode.specificProblem;
    
    
    //模拟笔算法
    public class BigIntMultiply {
    
        public String bigIntMultiply(String a, String b) {
            StringBuilder sba = new StringBuilder(a);
            StringBuilder sbb = new StringBuilder(b);
            StringBuilder result = new StringBuilder("");
            
            int[] num = new int[sba.length() + sbb.length()];
            
            for(int i = sbb.length() - 1; i >= 0; i --) {
                int numB = sbb.charAt(i) - '0';
                for(int j = sba.length() - 1; j >=0; j --) {
                    int multiplyTemp = numB * ( sba.charAt(j) - '0' );//这个位乘法的结果
                    int resultTemp = (multiplyTemp % 10) + num[i + j + 1];
                    num[ i + j + 1] = resultTemp % 10;//这个i + j + 1是自己写了个竖式找规律找出来的
                    num[i + j] += (multiplyTemp / 10) + (resultTemp / 10);//第一个是这两个位相乘的进位,第二个是乘积的个位加上本来这个位上的数字后的进位
                }
            }   
            boolean begin = false;
            for(int intTemp : num) {
                if(intTemp != 0)begin = true;//第一次看到非0的数字就开始添加到字符串了
                if(begin)result.append(intTemp);
            }
            return result.toString();
        }
        
        public static void main(String[] args) {
            System.out.println(new BigIntMultiply().bigIntMultiply("1237", "998"));
        }
    
    }
  • 相关阅读:
    APB协议
    AHB总线协议(一)
    C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
    深入理解C++内存管理机制
    c/c++内存机制(一)(转)
    与临时对象的斗争(下)
    与临时对象的斗争(上)ZZ
    C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全
    qt5信息提示框QMessageBox用法
    红黑树
  • 原文地址:https://www.cnblogs.com/wangshen31/p/10648908.html
Copyright © 2011-2022 走看看