[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/dst/cpp-lib/master/src/math.cpp [Back]  [Original]

/*
 * mathlib.cpp
 *
 *  Created on: Apr 1, 2012
 *      Author: dst
 */

#include 
#include 
#include 
#include 

using namespace std;

template T gcd(T a, T b) {
    return b > 0 ? gcd(b, a % b) : a; 
}

inline bool isPow2(int n) {
    return n > 0 && (n & (n-1)) == 0;
}

inline vector getDigits(int n) {
    vector digits;
    
    if (n == 0) {
        digits.push_back(0);
        return digits;
    }
    
    // Loop till there's nothing left
    while (n) { 
        int lastDigit = n % 10;
        digits.push_back(lastDigit);
        
        // Shift right the number
        n /= 10; 
    }
    reverse(digits.begin(), digits.end());
    return digits;
}

//TODO n over k, prime numbers

// tests
inline void math() {
    //gcd
    assert(gcd(13, 7) == 1);
    assert(gcd(21, 6) == 3);
    assert(gcd(7, 21) == 7);

    // isPow2
    assert(isPow2(1));
    assert(isPow2(2));
    assert(isPow2(4));
    assert(isPow2(8));
    
    assert(!isPow2(-1));
    assert(!isPow2(0));
    assert(!isPow2(3));
    assert(!isPow2(5));
    assert(!isPow2(6));

    // getDigits
    vector digits123 = getDigits(123);
    assert(digits123[0] == 1);
    assert(digits123[1] == 2);
    assert(digits123[2] == 3);
    
    vector digits0 = getDigits(0);
    assert(digits0[0] == 0);

    // sqrt
    assert(sqrt(9) == 3);

    // power
    assert(pow(2, 10) == 1024);
    //TODO: check it
    //assert(pow10(3) == 1000);
}


Web Proxy Viewer  |  New URL  |  Original Page