Skip to content
Snippets Groups Projects
hexavigesimal.cpp 982 B
Newer Older
  • Learn to ignore specific revisions
  • Jan Trávníček's avatar
    Jan Trávníček committed
    /*
    
     * hexavigesimal.cpp
    
    Jan Trávníček's avatar
    Jan Trávníček committed
     *
    
     * Created on: 19. 4. 2014
     * Author: Tomas Pecka
    
    Jan Trávníček's avatar
    Jan Trávníček committed
     */
    
    
    #include "../hexavigesimal"
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    #include <stdexcept>
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    namespace std {
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    unsigned fromBase26( string rep ) {
    	unsigned n = 0;
    	for(char repSymbol : rep ) {
    		unsigned remainder = repSymbol - 'A';
    		if(remainder > 26)
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    			throw std::invalid_argument(rep);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    		n = n * 26 + remainder;
    	}
    
    	return n;
    }
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    string toBase26( unsigned n ) {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	string name;
    	do {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    		name += ( char )( n % 26 + 'A' );
    		n = n / 26;
    	} while (n > 0);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	return string( name.rbegin( ), name.rend( ) );
    }
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    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());
    }
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    } /* namespace conversions */