java中超過long范圍的超大整數(shù)相加算法詳解(面試高頻)
java里有數(shù)字long來表示大的整數(shù),如果兩個數(shù)字的范圍超過了long,要做加法算法怎么做呢?
這個問題在面試中經(jīng)常碰到,如果之前沒有經(jīng)歷的,可能一時有點想不起來怎么做。
下面我們來分析一下,兩個數(shù)字超過了long的范圍,那顯然不能用java中的基本數(shù)字類型來計算了。
我們可以想小時候剛學習加法的豎式運算,個位對個位,十位對十位,百位對百位、、、以此類推。當個位滿十向十位進1,十位滿十向百位進1、、、以此類推,就這樣完成了運算。
表示出來如下:
1 4 5
+ 2 6 9
-------------
4 1 4
受此啟發(fā)我們可以做這道題了,數(shù)字如果超過了long的范圍那顯然在java里是以String類型呈現(xiàn)的,下面我們上代碼。
package com.wandou.demo.algorithm.post;
import org.junit.Test;
/**
* @author liming
* @date 2020-08-19
* @description 算法
*/
public class BigNumAddDemo {
@Test
public void bigintegerAddTest() {
System.out.println("Long.MAX_VALUE = " + Long.MAX_VALUE);
bigNumAdd("111", "2010");
bigNumAdd(Long.MAX_VALUE + "", Long.MAX_VALUE + "");
bigNumAdd(Long.MAX_VALUE + "", "10");
}
public void bigNumAdd(String strNum1, String strNum2) {
char[] chars1 = strNum1.toCharArray();
char[] chars2 = strNum2.toCharArray();
int len1 = chars1.length;
int len2 = chars2.length;
boolean oneBiger = len1 > len2;
int len = Integer.max(len1, len2);
StringBuilder targetSb = new StringBuilder();
//進位
int carry = 0;
for (int i = 0; i < len; i++) {
int temp;
int idx1 = len1 - 1 - i;
int idx2 = len2 - 1 - i;
if (oneBiger) {
if (i < len2) {
temp = Integer.parseInt(chars1[idx1] + "") + Integer.parseInt(chars2[idx2] + "") + carry;
} else {
temp = Integer.parseInt(chars1[idx1] + "") + carry;
}
} else {
if (i < len1) {
temp = Integer.parseInt(chars1[idx1] + "") + Integer.parseInt(chars2[idx2] + "") + carry;
} else {
temp = Integer.parseInt(chars2[idx2] + "") + carry;
}
}
carry = 0;
if (temp > 9) {
carry = 1;
targetSb.append(temp - 10);
} else {
targetSb.append(temp);
}
}
System.out.println(targetSb.reverse().toString());
}
}
測試結果:

總結
到此這篇關于java中超過long范圍的超大整數(shù)相加算法(面試高頻)的文章就介紹到這了,更多相關java超過long超大整數(shù)相加算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MyBatis使用自定義TypeHandler轉換類型的實現(xiàn)方法
這篇文章主要介紹了MyBatis使用自定義TypeHandler轉換類型的實現(xiàn)方法,本文介紹使用TypeHandler 實現(xiàn)日期類型的轉換,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10
Spring中Controller和RestController的區(qū)別詳解
這篇文章主要介紹了Spring中Controller和RestController的區(qū)別詳解,@Controller是標識一個Spring類是Spring MVC controller處理器,@Controller類中的方法可以直接通過返回String跳轉到jsp、ftl、html等模版頁面,需要的朋友可以參考下2023-09-09
SpringBoot集成MQTT實現(xiàn)交互服務通信
MQTT非常適用于物聯(lián)網(wǎng)領域,本文主要介紹了SpringBoot集成MQTT實現(xiàn)交互服務通信,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-08-08
SpringBoot返回多種格式的數(shù)據(jù)的實現(xiàn)示例
本文主要介紹了SpringBoot返回多種格式的數(shù)據(jù)的實現(xiàn)示例,主要包括了FastJson,xml,pdf,excel,資源流,具有一定的參考價值,感興趣的可以了解一下2021-10-10
解決mybatis-plus通用mapper調(diào)用報錯:Invalid bound statement
這篇文章主要介紹了解決mybatis-plus通用mapper調(diào)用報錯:Invalid bound statement的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

