java大整数相加
Posted 金色元年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java大整数相加相关的知识,希望对你有一定的参考价值。
-- 正整数相加
/* * description: 1. 反转 2. 补0 3. 计算 4. 最后结果反转 * @author maduar * @date 21/11/2018 10:15 PM * @email [email protected] * * */ 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 [email protected] * * */ 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)); } }
以上是关于java大整数相加的主要内容,如果未能解决你的问题,请参考以下文章