Biểu diễn số bằng mảng
Mỗi chữ số là một phần tử mảng. Ví dụ: 234 → {2,3,4}.
Ví dụ
a = {2,9,6}, b = {6,3,8}
Cộng từ cuối: 6+8=14 (ghi 4, nhớ 1)
9+3+1=13 (ghi 3, nhớ 1)
2+6+1=9
Kết quả: 934
Thuật toán
- Kiểm tra mảng nào dài hơn
- Cộng từ cuối (chữ số ít nghĩa nhất) về đầu
- Xử lý nhớ (carry)
- Nếu mảng dài hơn, cộng tiếp phần còn lại với nhớ
Mã nguồn C++
#include <iostream>
using namespace std;
void Sum(int a[], int b[], int n, int m) {
int sum[n];
int i = n-1, j = m-1, k = n-1;
int carry = 0, s = 0;
while (j >= 0) {
s = a[i] + b[j] + carry;
sum[k] = s % 10;
carry = s / 10;
i--; j--; k--;
}
while (i >= 0) {
s = a[i] + carry;
sum[k] = s % 10;
carry = s / 10;
i--; k--;
}
for (int i = 0; i < n; i++) cout << sum[i];
}
int main() {
int a[] = {5,6,9};
int b[] = {3,8};
int n = sizeof(a)/sizeof(a[0]);
int m = sizeof(b)/sizeof(b[0]);
cout << "Tổng = ";
if (n >= m) Sum(a, b, n, m);
else Sum(b, a, m, n);
return 0;
}
Kết quả
Tổng = 607