Cho số nguyên n và mảng m[] biểu diễn số lớn (m[0] là chữ số hàng cao nhất). Tính n + m[] lưu lại vào m[].
Ví dụ
n = 213, m = [1,5,8] → 213 + 158 = 371 → m = [3,7,1]
Thuật toán
- Duyệt m từ cuối (chữ số hàng đơn vị).
- Cộng n%10 + m[i] + carry.
- Cập nhật m[i] = sum%10, carry = sum/10, n /= 10.
- Cuối cùng nếu carry > 0, cần mở rộng mảng (code gốc không xử lý, giả định m đủ lớn).
Code C++
#include <iostream>
using namespace std;
void addNumberToArray(int n, int m[], int size) {
int carry = 0;
for (int i = size-1; i >= 0; i--) {
int sum = (n % 10) + m[i] + carry;
n /= 10;
carry = sum / 10;
m[i] = sum % 10;
}
// Nếu n>0 hoặc carry>0 thì cần xử lý mở rộng mảng (bỏ qua ở đây)
}
int main() {
int n = 679;
int m[] = {1, 9, 5, 7, 1, 9}; // 195719
int sz = sizeof(m)/sizeof(m[0]);
addNumberToArray(n, m, sz);
for (int i = 0; i < sz; i++) cout << m[i]; // 196398
return 0;
}
Kết quả
196398
(679 + 195719 = 196398)
Lưu ý: Code giả định mảng m đủ lớn chứa kết quả. Cần vector nếu không biết trước kích thước.