public class MyBadMath {
    // Los defines los declaramos como variables
    // con "public static final" delante
    public static final double E = 2.7182818284590452354;
    public static final double PI = 3.14159265358979323846;
    public static final int N = 20;
    // Los proximos metodos son funciones C con "public static" delante
    // Cuando no quiero trabajar con objetos, los atributos y metodos
    //      son "public static"
    public static double factorial(int n) {
        int i;
        double f;
        for (f = 1, i = 2; i <= n; i++) {
            f *= i;
        }
        return f;
    }
    public static double potencia(double b, int e) {
        int i;
        double p;
        for (p = 1, i = 1; i <= e; i++) {
            p *= b;
        }
        return p;
    }
    public static double eElevatX(int x) { // en C e_elevat_x()
        int i;
        double sum;
        for (sum = 0, i = 0; i <= N; i++) {
            sum += potencia(x, i) / factorial(i);
        }
        return sum;
    }
    public static double cos(double x) {
        int i;
        double sum;
        for (sum = 0, i = 0; i <= N; i++) {
            sum += potencia(x, 2 * i) / factorial(2 * i)
                    * potencia(-1, i);
        }
        return sum;
    }
    public static double sin(double x) {
        int i;
        double sum;
        for (sum = 0, i = 0; i <= N; i++) {
            sum += potencia(x, 2 * i + 1)
                    / factorial(2 * i + 1)
                    * potencia(-1, i);
        }
        return sum;
    }
    // "String[] args" es nuevo y println() va diferente que printf()
    public static void main(String[] args) {
        int x = 10;
        System.out.println("e^" + x + " = (aprox) " + eElevatX(x));
        System.out.println("e^" + x + " = " + potencia(E, x));
        System.out.println("sin(PI) = " + sin(PI));
        System.out.println("cos(PI) = " + cos(PI));
    }
}
