Skip to content

Commit ac9a560

Browse files
committed
new
1 parent 1092335 commit ac9a560

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

5. Data Structures and Algorithms/SumTwoInts.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
11
import java.math.BigInteger;
22
import java.util.Scanner;
33

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+
// #################################################################
427
public class SumTwoInts {
528
// Cộng hai số nguyên lớn (BigInteger) trong Java:
629

@@ -21,3 +44,46 @@ public static void main(String[] args) {
2144
scanner.close();
2245
}
2346
}
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+
}

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,12 @@ Trong khi sử dụng kho lưu trữ này cho việc học tập, bạn nên tu
166166

167167
<summary>Phần 5: Cấu trúc dữ liệu và Thuật toán bằng Java</summary>
168168

169+
- **Tuần 1: Làm quen với Java**
170+
- [SumTwoInts](5.%20Data%20Structures%20and%20Algorithms/SumTwoInts.java)
171+
- [SumArray]
172+
- [MaxSubarray]
173+
- **Tuần 2: Thuật toán đệ quy**
174+
169175
</details>
170176

171177
<details>

0 commit comments

Comments
 (0)