java中超過long范圍的超大整數(shù)相加算法詳解(面試高頻)
java里有數(shù)字long來表示大的整數(shù),如果兩個(gè)數(shù)字的范圍超過了long,要做加法算法怎么做呢?
這個(gè)問題在面試中經(jīng)常碰到,如果之前沒有經(jīng)歷的,可能一時(shí)有點(diǎn)想不起來怎么做。
下面我們來分析一下,兩個(gè)數(shù)字超過了long的范圍,那顯然不能用java中的基本數(shù)字類型來計(jì)算了。
我們可以想小時(shí)候剛學(xué)習(xí)加法的豎式運(yùn)算,個(gè)位對個(gè)位,十位對十位,百位對百位、、、以此類推。當(dāng)個(gè)位滿十向十位進(jìn)1,十位滿十向百位進(jìn)1、、、以此類推,就這樣完成了運(yùn)算。
表示出來如下:
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();
//進(jìn)位
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());
}
}
測試結(jié)果:

總結(jié)
到此這篇關(guān)于java中超過long范圍的超大整數(shù)相加算法(面試高頻)的文章就介紹到這了,更多相關(guān)java超過long超大整數(shù)相加算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java學(xué)生信息管理系統(tǒng)MVC架構(gòu)詳解
這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)MVC架構(gòu)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Mybatis中<if>和<choose>的區(qū)別及“=”判斷方式
這篇文章主要介紹了Mybatis中<if>和<choose>的區(qū)別及“=”判斷方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
JavaFX桌面應(yīng)用未響應(yīng)問題解決方案
這篇文章主要介紹了JavaFX桌面應(yīng)用未響應(yīng)問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot?Schedule調(diào)度任務(wù)的動態(tài)管理
Scheduled定時(shí)任務(wù)是Spring?boot自身提供的功能,所以不需要引入Maven依賴包,下面這篇文章主要給大家介紹了關(guān)于SpringBoot通過@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)以及問題解決的相關(guān)資料,需要的朋友可以參考下2023-02-02
Java中一維二維數(shù)組的靜態(tài)和動態(tài)初始化
今天通過本文給大家分享Java中的數(shù)組,包括一維數(shù)組和二維數(shù)組的靜態(tài)初始化和動態(tài)初始化問題,感興趣的朋友一起看看吧2017-10-10
springboot整合cxf發(fā)布webservice以及調(diào)用的方法
這篇文章主要介紹了springboot整合cxf發(fā)布webservice以及調(diào)用的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08

