# 高精度运算

#### 正文

```    private static void add(String a, String b) {
System.out.println("加===");
BigInteger ba = new BigInteger(a);
BigInteger bb = new BigInteger(b);
String res = "";
int temp;
int adv = 0;
for (int i = a.length() - 1, j = b.length() - 1; i > -1 || j > -1; ) {
if (i > -1 && j > -1)
temp = (a.charAt(i--) - '0') + (b.charAt(j--) - '0');
else if (i > -1)
temp = (a.charAt(i--) - '0');
else
temp = (b.charAt(j--) - '0');
adv = temp / 10;
res = temp % 10 + res;
}
if (adv != 0) {
res = adv + res;
}
System.out.println("结果=" + res);
}```

```    private static void sub(String a, String b) {
System.out.println("减===");
BigInteger ba = new BigInteger(a);
BigInteger bb = new BigInteger(b);
System.out.println("结果=" + ba.subtract(bb));
String res = "";
int temp;
int sub = 0;
String ch = "";
if (a.length() < b.length() || (a.compareTo(b) < 0)) {//正数
String c = a;
a = b;
b = c;
ch = "-";
}
for (int i = a.length() - 1, j = b.length() - 1; i > -1 || j > -1; ) {
if (i > -1 && j > -1) {
int tempA = a.charAt(i--) - '0' + sub;
sub = 0;
int tempB = b.charAt(j--) - '0';
if (tempA < tempB) {
sub = -1;
temp = tempA + 10 - tempB;
} else {
temp = tempA - tempB;
}
} else if (i > -1) {
temp = (a.charAt(i--) - '0') + sub;
sub = 0;
} else {
temp = (b.charAt(j--) - '0') + sub;
sub = 0;
}

res = temp + res;
}
//高位去0
int spilt = 0;
for (int i = 0; i < res.length(); i++) {
if (res.charAt(i) - '0' != 0) {
break;
} else {
spilt++;
}
}
res = res.substring(spilt);
System.out.println("结果=" + ch + res);
}```

```    private static void multiply(String a, String b) {
System.out.println("乘法===");
BigInteger ba = new BigInteger(a);
BigInteger bb = new BigInteger(b);
System.out.println("结果=" + ba.multiply(bb));
int as[] = new int[a.length()];
int bs[] = new int[b.length()];
for (int i = 0; i < a.length(); i++) {
as[i] = a.charAt(a.length() - i - 1) - '0';
}

for (int i = 0; i < b.length(); i++) {
bs[i] = b.charAt(b.length() - i - 1) - '0';
}
int res[] = new int[b.length() + a.length()];

for (int i = 0; i < a.length(); i++) {
int adv = 0;
int j;
for (j = 0; j < b.length(); j++) {
res[i + j] = as[i] * bs[j] + adv + res[i + j];
adv = res[i + j] / 10;
res[i + j] = res[i + j] % 10;
}
res[i + j] = adv;
}
int len = a.length() + b.length() - 1;
if (res[len] == 0) len--;
System.out.printf("结果=");
for (int i = len; i >= 0; i--) {
System.out.printf(res[i] + "");
}
}```

```public class Test {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入a");
String a = "";
if (scanner.hasNext())
a = scanner.next();
System.out.println("输入b");
String b = "";
if (scanner.hasNext())
b = scanner.next();
sub(a, b);
multiply(a, b);
}

}```

0 条评论

• ### Spring Security：安全访问控制

“ 在前面的两篇文章中，说了如何使用Spring Boot搭建Security项目以及实现自定义登录认证，今天就拿一个具体的前后端分离项目来看一下安全访问的控制...

• ### 关于CAS实现单点登录（一）

单点登录：Single Sign On,简称SSO，SSO使得在多个应用系统中，用户只需要登录一次就可以访问所有相互信任的应用系统。

• ### Spring AOP的简单应用

“ 在各种业务场景中，我们可会有打印日志这种语句，通常为了方便我们直接写在业务逻辑的代码中。实际上和业务无关的代码我们也放入到业务逻辑中，会带来了较强的侵入性编...

• ### Android实现微博菜单弹出效果

先上Android仿微博菜单弹出效果图，这个截图不是很流畅，大家可以下载apk试一下。

• ### Android ListView侧滑删除

今天是个值得纪念的日子，今天点亮了博客专家！相信我是第一个粉丝数量在20位以下，排名在万级别的以外的博客专家。

• ### 自定义Androidk全量更新组件

自动更新功能对于一个APP来说是必备的功能，特别是对于未投放市场下载的APP，每次都让用户删掉原来的，再下载新的版本，肯定是不合适的。

• ### 前缀树问题-LeetCode 409、412、414、415、419、421

给定一个包含大写字母和小写字母的字符串，找到通过这些字母构造成的最长的回文串。 在构造过程中，请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。 注意:...

• ### 自定义 Behavior，实现嵌套滑动、平滑切换周月视图的日历

使用 CoordinateLayout 可以协调它的子布局，实现滑动效果的联动，它的滑动效果由 Behavior 实现。以前用过小米日历，对它滑动平滑切换日月视...

• ### 《了不起的 nodejs》中 TwitterWeb 案例 bug 解决

了不起的nodejs算是一本不错的入门书，不过书中个别案例存在bug，按照书中源码无法做出和书中相同效果，原本兴奋的心情掺杂着些许失落。 现在我们看一下第七章H...