Ở đây chúng ta sẽ thấy một vấn đề, trong đó chúng ta sẽ thêm hai số n chữ số nhưng giá trị thực sẽ không được truyền. Chúng ta có thể hiểu khái niệm này thông qua một ví dụ -
Vì vậy, chúng ta có thể thấy rằng ở đây chỉ có các chữ số được thêm vào và câu trả lời được đặt. Đây là một mẹo nhỏ. Chúng ta phải quét các con số từ phải sang trái. Vì vậy tổng của 3 + 2 =6 sẽ được tính trước, nhưng nó sẽ được đặt sau cùng. Vì vậy, chúng tôi sẽ sử dụng ngăn xếp để lưu trữ các kết quả trung gian.
Thuật toán
noPropagateCarry (a, b)
begin size = max of length of a and length of b for i in range i to size, do al := last digit of a bl := last digit of b push (al + bl) into stack a := a / 10 b := b /10 done pop and print the elements from stack end
Ví dụ
#include<iostream> #include<stack> #include<cmath> using namespace std; int length(int n){ return log10(n) + 1; } void noPropagateCarry(int a, int b){ int size = max(length(a), length(b)); stack<int> stk; for(int i = 0; i <size; i++){ int al = a % 10; //last digit of a int bl = b % 10; //last digit of b stk.push(al + bl); a = a / 10; b = b/10; } while(!stk.empty()){ cout << stk.top(); stk.pop(); } } main() { int a = 7583, b = 9642; cout << "Result: "; noPropagateCarry(a, b); }
Đầu ra
Result: 1611125