Tính tổng 2 số cực lớn Java

Cho em hỏi reverseNum1.charAt(i) - ‘0’ sao lại phải trừ cho 0. Em có đoạn code dưới đây mọi người xem và chỉ giáo em với.

package buoi5.VuMinhLam;

import java.util.Scanner;

public class Bai1 {
    private static String reversesNum1, reversesNum2, sumElemrnt, number1, number2;
    private static int max;
    private static Scanner scanner = new Scanner(System.in);
    private static String regularExpression = "\\d{1,1000000}";

    public static void main(String[] args) {
        inputNum();
    }

    private static void inputNum() {
        number1 = checkIsNumber1(number1);
        number2 = checkIsNumber2(number2);

        reversesNum1 = reversesNum(number1);
        reversesNum2 = reversesNum(number2);

        int lentNum1 = number1.length();
        int lentNum2 = number2.length();

        max = Math.max(lentNum1, lentNum2);

        /**
         * compare number 1 vs max (or number 2 vs max) to find length number smaller then + '0'
         * when 2 number have equal length. We sum 2 number
         **/
        if (max > lentNum1) {
            for (int i = lentNum1; i < max; i++) {
                reversesNum1 += '0';
            }
        }
        if (max > lentNum2) {
            for (int i = lentNum2; i < max; i++) {
                reversesNum2 += '0';
            }
        }
        // sum 2 number
        System.out.println(reversesNum(sumNum(sumElemrnt)));
    }

    // The first number must enter the number
    private static String checkIsNumber1(String number1) {
        boolean checkNum1;
        String number;
        do {
            System.out.println("The first number: ");
            number = scanner.next();
            checkNum1 = number.matches(regularExpression);
            if (!checkNum1) System.out.println("You must enter the number !");
        } while (!checkNum1);
        number.lines();
        return number;
    }

    // The second number must enter the number
    private static String checkIsNumber2(String number2) {
        boolean checkNumber2;
        String number;
        do {
            System.out.println("The second number: ");
            number = scanner.next();
            checkNumber2 = number.matches(regularExpression);
            if (!checkNumber2) System.out.println("You must enter the number");
        } while (!checkNumber2);
        return number;
    }


    // Sum number 1 + number 2
    private static String sumNum(String sum) {

        int recordedNum = 0;
        int sum1;
        sumElemrnt = "";
        for (int i = 0; i < max; i++) {
            sum1 = reversesNum1.charAt(i) - '0' + reversesNum2.charAt(i) - '0' + recordedNum;
            sumElemrnt += sum1 % 10;
            recordedNum = sum1 / 10;

            if (recordedNum == 1) {
                sum1 += 1;
            }
        }
        return sumElemrnt;
    }

    // reverses the number to calculate the number from left to right
    private static String reversesNum(String numberStr) {
        int length1 = numberStr.length();
        String s = "";
        for (int i = 0; i < length1; i++) {
            s += numberStr.charAt(numberStr.length() - 1 - i); // the number is reversed
        }
        return s;
    }
}


Để lấy giá trị của số. Dữ liệu hiện tại được lưu bằng chuỗi, muốn lấy giá trị của chữ số thì trừ cho '0'. Cái này liên quan đến mã kí tự.

5 Likes

Vậy sao phải trừ cho ‘0’ mà không phải ‘1’

Để ra đúng giá trị chứ sao.
Đối với - '0':

'0' - '0' = 0
'1' - '0' = 1
'2' - '0' = 2
...

Còn - '1' thì ra gì?

'0' - '1' = -1
'1' - '1' = 0
'2' - '1' = 1

Sai phải không?

4 Likes

vâng em cảm ơn nhiều lắm ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?