Trong bài toán này, hai số được đưa ra. Cơ số của các số đó là n. Chúng ta phải tìm kết quả của số đó sau khi cộng với cơ số n.
Lúc đầu, các con số được chuyển thành số thập phân. Từ các giá trị thập phân, chúng ta có thể thêm chúng một cách đơn giản. Cuối cùng, các số lại được chuyển đổi thành số cơ số n.
N số cơ sở được cung cấp dưới dạng một chuỗi, vì đối với những số có cơ số lớn hơn 9, nó có thể chứa một số bảng chữ cái để biểu thị số, chẳng hạn như số thập lục phân, có 6 chữ cái (A-F).
Đầu vào và Đầu ra
Input: The base of a number system: 16 First number 2C Second number 5F Output: The result of addition is: 8B
Thuật toán
baseNtoDec (số, cơ sở)
Đầu vào - Chuỗi số của cơ số N, giá trị của cơ số N.
Đầu ra - Tương đương thập phân của số trong cơ số 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)
Đầu vào: Số thập phân, cơ số N để chuyển một số thập phân sang cơ số đó.
Đầu ra: Chuỗi số của cơ sở 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)
Đầu vào: Hai số trong cơ số N, giá trị của cơ số N.
Đầu ra: Số sau khi cộng trong cơ số N.
Begin dec1 := baseNtoDec(num1, base) dec2 := baseNtoDec(num2, base) sum := decToBaseN(dec1 + dec2, base) return sum End
Ví dụ
#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; }
Đầu ra
Enter Base: 16 Enter first number in base 16: 2C Enter second number in base 16: 5F The result of addition is: 8B