題目:
HJ57 高精度整數(shù)加法
題解:
1.逐位相加
按照傳統(tǒng)加減法模式,從最后一位開始,逐位相加,逢十進(jìn)一,傳統(tǒng)方式從右往左相加,可以將數(shù)字翻轉(zhuǎn),變成從左往右按照數(shù)組遍歷順序相加,最后再將結(jié)果翻轉(zhuǎn)。文章來源:http://www.zghlxwxcb.cn/news/detail-708893.html
public String getSum(String str1, String str2) {
// 翻轉(zhuǎn)
List<Integer> list1 = revers(str1);
List<Integer> list2 = revers(str2);
int len1 = list1.size();
int len2 = list2.size();
int carryBit = 0;
StringBuilder sb = new StringBuilder();
int length = len1 > len2 ? len1 : len2;
for (int i = 0; i < length; i++) {
// 如果超出則取0
int value1 = getValue(list1, i);
int value2 = getValue(list2, i);
int sum = value1 + value2 + carryBit;
if (sum < 10) {
sb.append(sum);
carryBit = 0;
} else {
sb.append(sum % 10);
carryBit = sum/10;
}
}
// 如果最后還有進(jìn)位,需要添加進(jìn)位
if (carryBit != 0) {
sb.append(carryBit);
}
// 翻轉(zhuǎn)結(jié)果
sb.reverse();
return sb.toString();
}
private int getValue(List<Integer> list, int index) {
if (index >= list.size()) {
return 0;
}
return list.get(index);
}
private List<Integer> revers(String str) {
char[] chars = str.toCharArray();
List<Integer> list = new ArrayList<>(chars.length);
for (int i = chars.length - 1; i >= 0; i--) {
list.add(chars[i] - '0');
}
return list;
}
時間復(fù)雜度:O(n+m)文章來源地址http://www.zghlxwxcb.cn/news/detail-708893.html
2.利用大整形類型BigInteger實現(xiàn)
public String getSum(String str1, String str2) {
BigInteger bigInteger1 = new BigInteger(str1);
BigInteger bigInteger2 = new BigInteger(str2);
bigInteger1 = bigInteger1.add(bigInteger2);
return bigInteger1.toString();
}
到了這里,關(guān)于HJ57 高精度整數(shù)加法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!