java 大整数相加 负数_java大整数相加

-- 正整数相加

/*

* description: 1. 反转 2. 补0 3. 计算 4. 最后结果反转

* @author maduar

* @date 21/11/2018 10:15 PM

* @email maduar@163.com

*

* */

public class MaxNum {

private MaxNum() {

}

public static String sumMaxNumber(String numberA, String numberB) {

// 校验空傎

if (!isAllNum(numberA) || !isAllNum(numberB)) {

return null;

}

// 反转

numberA = reverseString(numberA);

numberB = reverseString(numberB);

String maxString = getMaxLengthString(numberA, numberB);

String minString = getMinLengthString(numberA, numberB);

// 补0

int maxLength = maxString.length();

int minLength = minString.length();

if (maxLength > minLength) {

minString = getMoreZero(minString, maxLength);

}

// 获取sum

return getSumNumber(maxString, minString, maxLength);

}

// 判断字符是否为空

public static boolean isBlank(String str) {

return str == null || "".equals(str);

}

// 反转字符串

public static String reverseString(String str) {

return new StringBuilder(str).reverse().toString();

}

// 获取长度较大的字符

public static String getMaxLengthString(String numberA, String numberB) {

return numberA.length() > numberB.length() ? numberA : numberB;

}

// 获取长度较小的字符

public static String getMinLengthString(String numberA, String numberB) {

return numberA.length() > numberB.length() ? numberB : numberA;

}

// 反转后补0

public static String getMoreZero(String str, int maxLen) {

int strLen = str.length();

int addLen = maxLen - strLen;

if (addLen < 1) {

return str;

}

StringBuilder sb = new StringBuilder();

for (int i = 0; i < addLen; i++) {

sb.append("0");

}

return str + sb.toString();

}

// 反转后,获取sum

public static String getSumNumber(String maxString, String minString, int maxLength) {

int[] resultArray = new int[maxLength + 1];

int[] maxStringArray = stringToIntArray(maxString);

int[] minStringArray = stringToIntArray(minString);

int temp = 0;

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

// a1 + b1 + c1

temp = maxStringArray[i] + minStringArray[i] + resultArray[i];

if (temp > 9) {

resultArray[i] = temp % 9;

// 结果大于9,进位1

resultArray[i + 1] = 1;

} else {

resultArray[i] = temp;

}

}

StringBuilder maxNumberS = new StringBuilder();

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

maxNumberS.append(resultArray[i]);

}

// 判断最后一位是否有进位,有则保留

if (resultArray[maxLength] != 0) {

maxNumberS.append(resultArray[maxLength]);

}

return maxNumberS.reverse().toString();

}

// #char to int

public static int stringCharToInt(char ch) {

int result = (int) ch - 48;

if (result < 0) {

result = 0;

}

return result;

}

// 判断字符串是不是全数字

public static boolean isAllNum(String s) {

if (isBlank(s)) {

return false;

}

int cursor = 0;

int len = s.length();

while (cursor < len &&

Character.isDigit(s.charAt(cursor))) {

cursor++;

}

if (cursor == len) {

return true;

}

return false;

}

public static int[] stringToIntArray(String str) {

int cursor = 0;

int len = str.length();

int[] arr = new int[len];

while (cursor < len) {

arr[cursor] = (int) str.charAt(cursor) - 48;

cursor++;

}

return arr;

}

}

-- test

/*

* description:

* @author maduar

* @date 21/11/2018 10:16 PM

* @email maduar@163.com

*

* */

public class MaxNumTest {

@Test

public void testBigInteger() {

String numberA = "66666666666666666666666";

String numberB = "2222222222222222222222";

BigInteger a = new BigInteger(numberA);

BigInteger b = new BigInteger(numberB);

String result = "68888888888888888888888";

String testResult = a.add(b).toString();

Assert.assertEquals(result, testResult);

}

@Test

public void testSumMaxNumber() {

String numberA = "66666666666666666666666";

String numberB = "2222222222222222222222";

// String numberA = "123456";

// String numberB = "54321";

String numberC = MaxNum.sumMaxNumber(numberA, numberB);

String result = "68888888888888888888888";

// String result = "177777";

Assert.assertEquals(result, numberC);

}

@Test

public void testCheckStr() {

String a = "";

String b = null;

String c = "1";

String d = "1a";

Assert.assertFalse(MaxNum.isAllNum(a));

Assert.assertFalse(MaxNum.isAllNum(b));

Assert.assertFalse(MaxNum.isAllNum(d));

Assert.assertTrue(MaxNum.isAllNum(c));

}

@Test

public void testIsBlank() {

String a = "";

String b = null;

String c = "1";

Assert.assertTrue(MaxNum.isBlank(a));

Assert.assertTrue(MaxNum.isBlank(b));

Assert.assertFalse(MaxNum.isBlank(c));

}

@Test

public void testReverseString() {

String a = "12345";

String b = MaxNum.reverseString(a);

String result = "54321";

Assert.assertEquals(result, b);

}

@Test

public void testGetMaxLengthString() {

String a = "12345";

String b = "12";

String result = "12345";

Assert.assertEquals(result, MaxNum.getMaxLengthString(a, b));

}

@Test

public void testGetMinLengthString() {

String a = "12345";

String b = "12";

String result = "12";

Assert.assertEquals(result, MaxNum.getMinLengthString(a, b));

}

@Test

public void getGetMoreZero() {

String a = "123";

int len = 5;

String result = "12300";

Assert.assertEquals(result, MaxNum.getMoreZero(a, len));

}

@Test

public void testGetSumNumber() {

String numberA = "666";

String numberB = "220";

int len = numberA.length();

String result = "688";

Assert.assertEquals(result, MaxNum.getSumNumber(numberA, numberB, len));

}

@Test

public void testStringCharToInt() {

char a = '6';

int result = 6;

Assert.assertEquals(result, MaxNum.stringCharToInt(a));

}

@Test

public void testIsAllNum() {

String numberA = "66666666666666666666666";

String numberb = "6666666666666666666666a";

Assert.assertTrue(MaxNum.isAllNum(numberA));

Assert.assertFalse(MaxNum.isAllNum(numberb));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值