এখানে আমরা একটি সমস্যা দেখতে পাব, যেখানে আমরা দুটি 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