public class Example8 {
  
  /**
   * mult multiplies m times n.
   * @arg m a natural number
   * @arg n an integer
   * @return mn
   * precondition: m >= 0
   */
  public static int mult(int m, int n) {
    int x = m;
    int y = n;
    int z = 0;
    // loop invariant: z = mn - xy
    while (x != 0) {
      if (x % 2 == 1) { // x odd
        z = z + y;
      }
      x = x >> 1; // x = x div 2 (right shift)
      y = y << 1; // y = 2y (left shift)
    }
    // post condition: z = mn
    return z;
  }
  
}
