You are here: Home Lecture 1 Full Factorial.java

Factorial.java

Python Source icon Factorial.java — Python Source, 989 bytes

File contents

import java.io.*;

public class Factorial {

    /*@ requires n >= 0;
      @ ensures  \result == fact(n);
      @*/
    public static int factorial(int n) {
	int result = 1;
	while (n > 0) {
	    result *= n--;
	}
	return result;
    }


    /*@ requires n >= 0;
      @ ensures (n == 0 ==> \result == 1)
      @         && (n > 0 ==> \result == n*fact(n-1));
      @*/
    public static /*@pure@*/ int fact(int n) {
	return n <= 0 ? 1 : n * fact(n-1);
    }

    public static void main(String[] param) throws IOException {
	while (true) {
	    BufferedReader reader = 
		new BufferedReader(new InputStreamReader(System.in));
	    System.err.print("Compute factorial of: ");
	    try {
		String input = reader.readLine();
		if (input.equals("q"))
		    return;
		int value = Integer.parseInt(input);
		int result = factorial(value);
		System.err.println("The result is: "+result);
	    } catch (NumberFormatException ex) {
		System.err.println("Invalid Number: "+ex);
	    }
	}
    }

}