Cod sursa(job #2696677)

Utilizator NeoxDragos Stefan Neox Data 16 ianuarie 2021 13:04:18
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#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;
}