Pagini recente » Cod sursa (job #1985752) | Monitorul de evaluare | Cod sursa (job #1400065) | Cod sursa (job #1753452) | Cod sursa (job #2696677)
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
class Num {
private:
char* num;
int base;
public:
Num(const char* num, int base) {
this->num = new char[strlen(num) + 1];
strcpy(this->num, num);
this->base = base;
}
char* Get() {
return num;
}
void Print() {
for(int i = 0; num[i]; i++) {
cout << num[i];
}
cout << '\n';
}
Num Base(int x) {
int num10 = 0, exp = 1, nr_dig = 0, dig;
stack<char> st;
for(int i = strlen(num) - 1; i >= 0; i--) {
dig = num[i] - (isdigit(num[i])? '0' : 'A' - 10);
num10 += dig * exp;
exp *= base;
}
do {
int rem = num10 % x;
st.push(rem + (rem < 10? '0' : 'A' - 10));
nr_dig++;
num10 /= x;
} while(num10);
char* numx = new char[nr_dig + 1];
int i = 0;
while(!st.empty()) {
numx[i++] = st.top();
st.pop();
}
Num new_Num(numx, x);
delete[] numx;
return new_Num;
}
~Num() {
delete[] num;
}
};
int main() {
Num x("8FD", 16);
x.Base(10).Print();
return 0;
}