자바 에서 long 범 위 를 초과 한 초대형 정수 더하기 알고리즘 상세 설명(면접 고주파)

자바 에는 큰 정 수 를 나타 내 는 숫자 롱 이 있 습 니 다.만약 두 숫자의 범위 가 롱 을 초과 하면 덧셈 알고리즘 을 어떻게 해 야 합 니까?
이 문 제 는 면접 에서 자주 부 딪 히 는데,이전에 경험 하지 않 았 다 면 어떻게 해 야 할 지 잠시 생각 이 나 지 않 을 것 이다.
다음은 두 숫자 가 롱 의 범 위 를 넘 어 섰 다 는 것 을 분석 해 보 자.그것 은 자바 의 기본 숫자 유형 으로 계산 할 수 없 음 이 분명 하 다.
우 리 는 어 렸 을 때 덧셈 의 세로 식 연산 을 배 웠 는데,한 자 리 는 한 자 리 를 맞 추고,열 자 리 는 열 자 리 를 맞 추고,백 자 리 는 백 자 리 를 맞 추고,이런 식 으로 유추 할 수 있다.한 자리 가 10 에서 10 으로 1,10 자리 가 10 에서 100 자리 로 1,,,이런 식 으로 유추 하여 이렇게 연산 을 완성 하 였 다.
다음 과 같이 표시 합 니 다.
   1 4 5
  + 2 6 9
-------------
    4 1 4 
이 깨 우 침 을 받 아 우 리 는 이 문 제 를 풀 수 있 습 니 다.숫자 가 long 의 범 위 를 넘 으 면 자바 에서 String 형식 으로 나타 나 는 것 이 분명 합 니 다.아래 에 코드 를 올 리 겠 습 니 다.

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());
  }

}
테스트 결과:
测试结果
총결산
자바 에서 롱 범 위 를 초과 하 는 초대형 정수 더하기 알고리즘(면접 고주파)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 자바 가 롱 의 초대형 정수 더하기 알고리즘 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 도 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기