不進位加法?


這裡我們將看到一個問題,即我們要相加兩個 n 位數,但不會進位。我們可以透過一個示例來理解這個概念 −

所以我們可以看到,這裡只有數字會被相加並且被放置在末尾。這裡有一個技巧。我們必須從右到左掃描數字。因此,3+2 = 6 的和將首先計算,但它將被放置在末尾。因此,我們將使用棧來儲存中間結果。

演算法

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

示例

 演示

#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);
}

輸出

Result: 1611125

更新於: 30-7月-2019

430 次瀏覽

啟動你的 職業生涯

完成本課程以獲得認證

開始
廣告
© . All rights reserved.