2016-10-20 1 views
2

Problem:Fehler in Java auf SPOJ

http://www.spoj.com/problems/EIGHTS/

Haben KTH Anzahl von Anfang an, deren Würfel hat 888 als letzte 3 Ziffern zu drucken. Es folgt einem Muster: 192.442.692.942.1192.1442.1692.1942.2192.2442.2692.2942 und so weiter.

Meine Lösung:

import java.util.Scanner; 

class Main { 

    public static void main(String[] args)throws java.lang.Exception { 
     Scanner p = new Scanner(System.in); 
     for(int i=p.nextInt();i>0;i--){ 
      int k = p.nextInt(); 
      int A[] = {192,442,692,942}; 
      int l = 0; 
      while(l<k){ 
       if((l!=0)&&(l%4 == 0)){ 
        A[0]+=1000; 
        A[1]+=1000; 
        A[2]+=1000; 
        A[3]+=1000; 
       } 
       l++; 
      } 
      System.out.println(A[(l-1)%4]); 
     } 
    } 
} 

SPOJ sagt NZEC Fehler.

Hilf mir herauszufinden, wo ich falsch liege.

Antwort

0

Weil Sie k = 2000000000000 in int speichern werden, was nicht möglich wäre und daher überläuft und möglicherweise eine negative Zahl speichert, auf die Sie für den Array-Index zugreifen. Daher ist es eigentlich arrayIndexOutOFBounds Problem. Um zu überprüfen, können Sie try-catch für ArrayIndexOutOFBounds verwenden und etwas drucken. Es wird diesmal eine falsche Antwort geben.

+0

Ich habe auch versucht mit bigIntegers aber es gibt den gleichen Fehler – Aman

+0

Hier ist das Codepaket spoj; import java.math.BigInteger; Import java.util.Scanner; öffentliche Klasse Eights { public static void main (Zeichenfolge [] args) throws java.lang.Exception { Scanner p = neuer Scanner (System.in); für (int i = p.nextInt(); i> 0; i -) { BigInteger k = p.nextBigInteger(); k = ktract (BigInteger.ONE); k = k.multiply (BigInteger.valueOf (250)); k = k.add (BigInteger.valueOf (192)); System.out.println (k); } } } – Aman

+0

Entfernen Sie die erste Zeile "Paket spoj;". Es gibt Fehler. Während der Übermittlung hast du kein Paket. Versuchen Sie auch, Ihren Algorithmus zu optimieren, da das Ausführen einer Schleife für 10^13 nicht gut ist. –