Computer >> Máy Tính >  >> Lập trình >> lập trình C

Phép cộng hai số mà không cần truyền Carry?

Ở đâ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ụ -

Phép cộng hai số mà không cần truyền Carry?

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