ในปัญหานี้ จะให้ตัวเลขสองตัว ฐานของตัวเลขเหล่านั้นคือ 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(ธ.ค. ฐาน)
ป้อนข้อมูล: เลขฐานสิบ ฐาน 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