Løsningsforslag - oppgaver i Avsnitt D.6


Oppgave 2

La M det største heltallet av typen int. Vi må finne største heltall n slik at n (n − 1)/2 ≤ M. Det finner vi ved å løse ligningen:

    x2 + x − 2M = 0

Java-kode:

 System.out.println(Math.sqrt(0.25 + 2.0*Integer.MAX_VALUE) - 0.5);

// Utskrift: 65535.5

Svaret blir n = 65535

  public static int sum(int m, int n)   // summen av tallene fra m til n
  {
    if (m == n) return m;            // summen av ett tall er lik tallet
    int k = (m + n)/2;               // k er midt mellom m og n
    return sum(m,k) + sum(k+1,n);    // adderer de to delene
  }

  public static int sum(int n)       // summen av tallene fra 1 til n
  {
    if (n < 1) throw new IllegalArgumentException
      ("n (" + n + ") må være positiv!");

    if (n > 65535) throw new IllegalArgumentException
      ("n (" + n + ") er for stor!");

    return sum(1,n);
  }