PGZXB的博客

学知识·敲代码·写文章

BigInteger提供的乘法操作

  • 乘法 : public BigInteger multiply(BigInteger val)

使用示例

1
2
3
4
5
6
7
8
public class Test {
public static void main(String[] args) {
BigInteger a = new BigInteger("12090");
BigInteger b = new BigInteger("1234");

System.out.println(a.multiply(b));
}
}
阅读全文 »

在研究Java的BigInteger乘法操作的源码时,在JDK的实现里看到了三种算法,调用multiply会根据两个乘数的大小进入不同的算法进行进一步的计算,他们分别是:

下面分别讲解各个算法,前面两种算法是比较好理解和实现的,而最后一种算法是比较复杂的。当然,本篇文章重点讲解三种算法的原理,实现部分参考JDK源码(BigInteger.java)即可。根据我的计划,之后的会有自己实现大数乘法的文章(也许会直接在此篇文章上增添)。

阅读全文 »

Java大数源码剖析(四) - 1.位运算

BigInteger提供的位操作

  • 按位与 : public BigInteger and(BigInteger val)
  • 按位与上对方的非 : public BigInteger andNot(BigInteger val)
  • 按位或 : public BigInteger or(BigInteger val)
  • 按位异或 : public BigInteger xor(BigInteger val)
  • 按位非 : public BigInteger not()

使用示例

阅读全文 »

Java大数源码剖析(一) - BigInteger的底层数据结构

本系列文章对Java大数类源码进行剖析, Java大数类包括java.math.BigInteger和java.math.BigDecimal, 本人使用的JDK版本为13.0.2

本系列文章按照以下顺序 :

  • BigInteger的介绍和底层数据结构 (一篇文章)
  • 依次剖析BigInteger各个常用方法的源码实现(从简到难) (若干篇文章)
  • 讲解BigDecimal的的介绍和底层数据结构 (一篇文章)
  • 依次剖析BigInteger各个常用方法的源码实现(从简到难) (若干篇文章)
  • 后续(文章)计划 : 利用C++实现自己的BigNumber库, 这是我剖析java大数类的最终目的,最终会形成一套处理大整数的C++开源库PGBigNumber

BigInteger介绍

阅读全文 »

8086汇编复习手册

声明 : 本文全部内容的背景均为80x86平台;文中标点中英混用,懒得改;文中代码基本都经实际验证过。文章内容均个人(PGZXB pgzxb@qq.com)整理,未经校正,欢迎勘误!

8086平台基础

大小端

  • 8086平台为小端机, 即低字节存放在低地址, 高字节存放在高地址
阅读全文 »

二维数组中的查找

  • 来源 : LeetCode - 剑指 Offer 04. 二维数组中的查找
  • 难度 : 中等
  • 标签 : 二叉搜索树(BST), 二分查找(BS)

    题目描述

  • 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
  • 示例 :

阅读全文 »