1
1
import java .math .BigInteger ;
2
2
import java .util .Scanner ;
3
3
4
+ // Đề bài: Cộng 2 số nguyên a, b (0 <= a, b <= 10^19).
5
+ // Đầu vào: 2 số nguyên a, b.
6
+ // Đầu ra: Tổng của 2 số nguyên a, b.
7
+
8
+ // Nhận xét:
9
+ /* - Tổng của 2 số nằm trong khoảng từ 0 đến 2 * 10^19.
10
+ * - Kiểu số nguyên trong Java lớn nhất là Long (64 bit) với giá trị tối đa là 2^63 - 1 < 2 * 10^19.
11
+ * - Do đó, không thể lưu trữ số nguyên lớn trong kiểu dữ liệu Long.
12
+ * -> Sử dụng class BigInteger trong Java để lưu trữ số nguyên lớn.
13
+ * - Class này cung cấp một số phương thức để thực hiện các phép toán số học trên số nguyên lớn.
14
+ * + add(BigInteger val) -> (this + val): Tổng.
15
+ * + subtract(BigInteger val) -> (this - val): Hiệu.
16
+ * + multiply(BigInteger val) -> (this * val): Tích.
17
+ * + divide(BigInteger val) -> (this / val): Thương (phép chia nguyên).
18
+ * + mod(BigInteger val) -> (this % val): Phần dư.
19
+ * + pow(int exponent) -> (this ^ exponent): Lũy thừa.
20
+ * + abs() -> |this|: Trị tuyệt đối.
21
+ * ...
22
+ */
23
+
24
+ // #################################################################
25
+ // ################ Sum of Two Integers in Java ###################
26
+ // #################################################################
4
27
public class SumTwoInts {
5
28
// Cộng hai số nguyên lớn (BigInteger) trong Java:
6
29
@@ -21,3 +44,46 @@ public static void main(String[] args) {
21
44
scanner .close ();
22
45
}
23
46
}
47
+
48
+ // Ngoài ra, có 1 số cách khác để cộng 2 số nguyên lớn:
49
+
50
+ // Cách 1: Sử dụng phép cộng thông thường trên chuỗi số nguyên.
51
+ /*
52
+ * - Đọc 2 số nguyên a, b vào 2 chuỗi số.
53
+ * - Thực hiện phép cộng từ hàng đơn vị đến hàng cao nhất.
54
+ */
55
+ class SumByString {
56
+ private String num1 ;
57
+ private String num2 ;
58
+
59
+ public SumByString (long a , long b ) {
60
+ this .num1 = String .valueOf (a );
61
+ this .num2 = String .valueOf (b );
62
+ }
63
+
64
+ public String add () {
65
+ StringBuilder result = new StringBuilder ();
66
+ int carry = 0 ;
67
+ int i = num1 .length () - 1 ;
68
+ int j = num2 .length () - 1 ;
69
+
70
+ while (i >= 0 || j >= 0 ) {
71
+ int sum = carry ;
72
+ if (i >= 0 ) {
73
+ sum += num1 .charAt (i --) - '0' ;
74
+ }
75
+ if (j >= 0 ) {
76
+ sum += num2 .charAt (j --) - '0' ;
77
+ }
78
+
79
+ carry = sum / 10 ;
80
+ result .append (sum % 10 );
81
+ }
82
+
83
+ if (carry > 0 ) {
84
+ result .append (carry );
85
+ }
86
+
87
+ return result .reverse ().toString ();
88
+ }
89
+ }
0 commit comments