Số lớn được lưu dưới dạng mảng: mỗi phần tử là 1 chữ số, phần tử đầu = chữ số hàng cao nhất.
Ví dụ: 2399 → {2,3,9,9}. Cộng 1 → {2,4,0,0}.
Thuật toán
- Cộng 1 vào phần tử cuối.
- Xử lý nhớ (carry) lan ngược về đầu.
- Nếu vẫn còn nhớ sau phần tử đầu → chèn 1 vào đầu.
Chương trình C++ (dùng vector)
#include <bits/stdc++.h>
using namespace std;
void addOne(vector<int>& a) {
int n = a.size();
a[n-1] += 1;
int carry = a[n-1] / 10;
a[n-1] %= 10;
for (int i = n-2; i >= 0 && carry; i--) {
a[i] += carry;
carry = a[i] / 10;
a[i] %= 10;
}
if (carry) a.insert(a.begin(), 1);
}
int main() {
vector<int> num = {2, 3, 9, 9};
cout << "So goc: ";
for (int d : num) cout << d;
addOne(num);
cout << "\nSau khi cong 1: ";
for (int d : num) cout << d;
return 0;
}
Kết quả
So goc: 2399 Sau khi cong 1: 2400