এই সমস্যায়, দুটি সংখ্যা দেওয়া আছে। সেই সংখ্যাগুলোর বেস n। আমাদের বেস n-এই সেই সংখ্যাগুলোর যোগফল বের করতে হবে।
প্রথমে, সংখ্যাগুলো দশমিক সংখ্যায় রূপান্তর করা হয়। দশমিক মান থেকে, আমরা সহজে তাদের যোগ করতে পারি। অবশেষে, সংখ্যাগুলো আবার বেস n সংখ্যায় রূপান্তর করা হয়।
বেস n সংখ্যাগুলো স্ট্রিং হিসেবে দেওয়া থাকে, কারণ যেসব সংখ্যার বেস ৯-এর চেয়ে বড়, সেগুলোতে অক্ষর থাকতে পারে সংখ্যা প্রকাশ করতে, যেমন হেক্সাডেসিমেল সংখ্যায় ৬টি অক্ষর (A-F) থাকে।
ইনপুট এবং আউটপুট
ইনপুট: একটি সংখ্যা পদ্ধতির বেস: ১৬ প্রথম সংখ্যা 2C দ্বিতীয় সংখ্যা 5F আউটপুট: যোগফলের ফলাফল হল: 8B
অ্যালগরিদম
baseNtoDec(number, base)
ইনপুট - বেস N-এর সংখ্যা স্ট্রিং, বেস N-এর মান।
আউটপুট - বেস N-এর সংখ্যার দশমিক সমতুল্য।
শুরু
len := number-এর দৈর্ঘ্য
power := 1
num := 0
i := len -1 থেকে 0 পর্যন্ত নিচের দিকে, করুন
যদি number[i] >= base, তবে
অবৈধ সংখ্যা ফেরত দিন
num := num + number[i] * power
power := power * base
শেষ
num ফেরত দিন
শেষdecToBaseN(dec, base)
ইনপুট: দশমিক সংখ্যা, বেস N যাতে দশমিক সংখ্যাকে ওই বেসে রূপান্তর করা যায়।
আউটপুট: বেস N-এর সংখ্যা স্ট্রিং।
শুরু
যতক্ষণ dec > 0, করুন
res := concatenate (dec mod base) with res
dec := dec / base
শেষ
রেজাল্ট উল্টো করুন
res ফেরত দিন
শেষaddBaseN(num1, num2, base)
ইনপুট: বেস N-এ দুটি সংখ্যা, বেস N-এর মান।
আউটপুট: বেস N-এ যোগফলের সংখ্যা।
শুরু dec1 := baseNtoDec(num1, base) dec2 := baseNtoDec(num2, base) sum := decToBaseN(dec1 + dec2, base) sum ফেরত দিন শেষ
উদাহরণ
#include<iostream> #include<algorithm> using namespace std; int getVal(char c) { if(c >= '0' && c<='9') return int(c-'0'); //প্রদত্ত সংখ্যার দশমিক মান else return int(c-'A'+10); //অ্যালফানিউমেরিক সংখ্যা জন্য } char revVal(int n) { if(n >= 0 && n <=9) return char(n+'0'); //প্রদত্ত সংখ্যার ক্যারেক্টার মান else return char(n+'A'-10); //অ্যালফানিউমেরিক সংখ্যা জন্য, দশমিক থেকে অক্ষর পান } int baseNtoDec(string number, int base) { int len = number.size(); int power = 1; int num = 0; for(int i = len-1; i>= 0; i--) { //শেষ ডিজিট থেকে প্রথম ডিজিট পর্যন্ত if(getVal(number[i]) >= base) return INT_MIN; //যখন একটি ডিজিট >= base, ত্রুটি হিসেবে -ve অসীম ফেরত দিন num += getVal(number[i])*power; power = power*base; } return num; } string decToBaseN(int dec, int base) { string res = ""; //খালি স্ট্রিং while(dec > 0) { res += revVal(dec%base); dec /= base; } reverse(res.begin(), res.end()); //স্ট্রিং উল্টো করুন ফাইনাল আন্সার পেতে return res; } int main() { int base; string num1, num2, sum; cout << "Enter Base: "; cin >> base; cout << "Enter first number in base "<<base<<": ";cin >> num1; cout << "Enter second number in base "<<base<<": ";cin >> num2; sum = decToBaseN((baseNtoDec(num1, base) + baseNtoDec(num2, base)), base); cout << "The result of addition is: " << sum; }আউটপুট
Enter Base: 16 Enter first number in base 16: 2C Enter second number in base 16: 5F The result of addition is: 8B