এই সমস্যায়, দুটি নম্বর দেওয়া আছে। সেই সংখ্যাগুলোর ভিত্তি হল n. বেস n এও যোগ করার পর সেই সংখ্যার ফলাফল বের করতে হবে।
প্রথমে, সংখ্যাগুলি দশমিক সংখ্যায় রূপান্তরিত হয়। দশমিক মান থেকে, আমরা সহজভাবে তাদের যোগ করতে পারি। অবশেষে, সংখ্যাগুলি আবার ভিত্তি n সংখ্যায় রূপান্তরিত হয়।
n বেস নম্বরগুলি একটি স্ট্রিং হিসাবে দেওয়া হয়, কারণ যে সংখ্যাগুলির ভিত্তি 9-এর বেশি, তাতে সংখ্যাগুলিকে প্রতিনিধিত্ব করার জন্য কিছু বর্ণমালা থাকতে পারে, যেমন হেক্সাডেসিমেল সংখ্যা, সেখানে 6টি অক্ষর (A-F) রয়েছে৷
ইনপুট এবং আউটপুট
Input: The base of a number system: 16 First number 2C Second number 5F Output: The result of addition is: 8B
অ্যালগরিদম
baseNtoDec(সংখ্যা, ভিত্তি)
ইনপুট - বেস N এর সংখ্যা স্ট্রিং, বেস N এর মান।
আউটপুট - বেস N.
-এ সংখ্যাটির দশমিক সমতুল্যBegin len := length of number power := 1 num := 0 for i := len -1 down to 0, do if number[i] >= base, then return invalid number num := num + number[i] * power power := power * base done return num End
decToBaseN(dec, base)
ইনপুট: দশমিক সংখ্যা, একটি দশমিক সংখ্যাকে সেই বেসে রূপান্তর করতে বেস N।
আউটপুট: বেস N.
এর সংখ্যা স্ট্রিংBegin while dec > 0, do res := concatenate (dec mod base) with res dec := dec / base done reverse the result return res End
addBaseN(num1, num2, base)
ইনপুট: বেস N-এ দুটি সংখ্যা, বেস N-এর মান।
আউটপুট: বেস N.
এ যোগ করার পর সংখ্যাBegin dec1 := baseNtoDec(num1, base) dec2 := baseNtoDec(num2, base) sum := decToBaseN(dec1 + dec2, base) return sum End
উদাহরণ
#include<iostream> #include<algorithm> using namespace std; int getVal(char c) { if(c >= '0' && c<='9') return int(c-'0'); //decimal value of given number else return int(c-'A'+10); //for Alphanumeric numbers } char revVal(int n) { if(n >= 0 && n <=9) return char(n+'0'); //character value of given number else return char(n+'A'-10); //for Alphanumeric numbers, get alphabet from decimal } int baseNtoDec(string number, int base) { int len = number.size(); int power = 1; int num = 0; for(int i = len-1; i>= 0; i--) { //from last digit to first digit if(getVal(number[i]) >= base) return INT_MIN; //when a digit is >= base, return -ve infinity as error num += getVal(number[i])*power; power = power*base; } return num; } string decToBaseN(int dec, int base) { string res = ""; //empty string while(dec > 0) { res += revVal(dec%base); dec /= base; } reverse(res.begin(), res.end()); //reverse the string to get final answer 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