/* * hexavigesimal.cpp * * Created on: 19. 4. 2014 * Author: Tomas Pecka */ #include "../hexavigesimal" #include <stdexcept> namespace std { unsigned fromBase26( string rep ) { unsigned n = 0; for(char repSymbol : rep ) { unsigned remainder = repSymbol - 'A'; if(remainder > 26) throw std::invalid_argument(rep); n = n * 26 + remainder; } return n; } string toBase26( unsigned n ) { string name; do { name += ( char )( n % 26 + 'A' ); n = n / 26; } while (n > 0); return string( name.rbegin( ), name.rend( ) ); } unsigned bijectiveFromBase26(string rep) { unsigned n = 0; for (char repSymbol : rep ) { unsigned remainder = repSymbol - 'A'; if(remainder > 26) throw std::invalid_argument(rep); n = n * 26 + remainder + 1; } return n; } string bijectiveToBase26(unsigned n) { string name; while(n > 0) { --n; name += (char) (n % 26 + 'A'); n /= 26; } return string(name.rbegin(), name.rend()); } } /* namespace conversions */