1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java 加法运算_[Java]大数运算之加法

java 加法运算_[Java]大数运算之加法

时间:2019-05-21 19:58:47

相关推荐

java 加法运算_[Java]大数运算之加法

一 题目

Input:

String a = "15324564...1455445"; //数字过长,不能转换为int/long型运算

String b = "45645612...145"; //数字过长,不能转换为int/long型运算

Output:

x = a + b

基本思路:

当字符串a、b的长度不等时:将二字符串的长度调整到相同

即 短的字符串 高位补0 → 以此避免后续 对高位的判断、繁琐处理

分别转换为字符数组

从后向前(右对齐),逐位运算

二 源码实现

import java.util.Scanner;

public class BigDecimalAdd {

public static String convertIntArrayToString(int[] intArray) {

StringBuffer stringBuffer = new StringBuffer();

boolean isNotStart = true; //从左至右, 只要一直遇到的是0,则为true

for (int i = 0; i < intArray.length; i++) {

if (isNotStart) {

if (intArray[i] != 0) {

isNotStart = false;

stringBuffer.append(intArray[i]);

}

} else {

stringBuffer.append(intArray[i]);

}

}

return stringBuffer.toString();

}

public static String plus(String a, String b) { //大数相加

int maxLength = a.length() > b.length() ? a.length() : b.length();

int minLength = a.length() < b.length() ? a.length() : b.length();

//1将二字符串调整到相同长度 and 2转换为字符串数组

if(maxLength!=minLength){ //长度不相同时 才需要对 短字符串的高位补0

StringBuffer sb = new StringBuffer();

for(int i=0,dif=maxLength-minLength;i

sb.append("0");

}

if(a.length()!=maxLength){//a是需要补0的字符串 即 左边(高位)补0 (以此避免后续 对高位的判断、繁琐处理)

a = sb.toString() + a;

} else {//b是需要补0的字符串

b = sb.toString() + b;

}

}

char[] numbersA = a.toCharArray();

char[] numbersB = b.toCharArray();

int[] result = new int[maxLength + 1];//默认 各位初始化值为0

int bitOperateResult; //临时保存位运算的结果

//3开始运算: 两数对比各位进行运算

for (int i = 1; i <= maxLength; i++) {

bitOperateResult = result[result.length - i] + Character.getNumericValue(numbersA[numbersA.length - i]) + Character.getNumericValue(numbersB[numbersB.length - i]);

result[result.length - i] = bitOperateResult % 10; //低位留余

result[result.length - i - 1] = result[result.length - i - 1] + bitOperateResult / 10; //高位进

}

return convertIntArrayToString(result);

}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

String a = scanner.next();

String b = scanner.next();

System.out.println("a + b = " + plus(a, b));

}

}

12345

100

a + b = 12445

三 延伸问题

1 多个大数相加呢?

2 2个大数的加、减、乘、除、模?

3 除了上述【整数】的运算,那【浮点数】的运算呢?

4 JDK实现: Java的大数运算类 java.math.BigInteger 与 java.math.BigDecimal

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。