Evo, kako bi izgledala C++ imlementacija. Parametri X i Y su najveće vrednosti za x i y uvećane za 1.
Code:
template<unsigned X, unsigned Y>
string toString(unsigned x, unsigned y)
{
unsigned long long z = x;
string result;
unsigned long long Z = X;
unsigned long long base = 1;
Z *= Y;
z *= Y;
z += y;
while (base < Z) {
unsigned long long z1 = z/36;
unsigned digit = z - z1*36;
z = z1;
base *= 36;
if (digit < 10) {
result += '0' + digit;
} else {
result += 'A' + digit - 10;
}
}
return result;
}
template<unsigned X, unsigned Y>
void fromString(const string &str, unsigned &x, unsigned &y)
{
unsigned long long result = 0;
for (unsigned i = str.size(); i > 0;) {
--i;
char c = str[i];
unsigned digit;
if (c >= '0' && c <= '9') {
digit = c - '0';
} else if (c >= 'a' && c <= 'z') {
digit = c - 'a' + 10;
} else {
digit = c - 'A' + 10;
}
result *= 36;
result += digit;
}
x = result/Y;
y = result - x*Y;
}
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.