2016-09-12 1 views
2

Hallo, ich bin neu in der Programmierung.Ich möchte meine Hände schmutzig in spoj.Ich habe viele Probleme versucht, aber ich immer Get "Laufzeitfehler (NZEC) edit ideone es" Fehler, obwohl Programme scheinen gut zu funktionieren auf Eclipse.Ich kann nicht direkt auf meinen Kopf bekommen.Es ist der erste Schritt, den ich nicht in der Lage bin zu kreuzen.Ich weiß, es scheint zu Ich würde mich freuen, wenn jemand mit Erfahrung in Spoj es mir holen könnte. Es könnte anderen Leuten helfen, die vor demselben Problem stehen.
Also die Frage istWarum mein Programm zeigt "Laufzeitfehler (NZEC) edit ideone es", wenn ich es auf spoj laufen

Multiplizieren Sie die angegebenen Zahlen.

Eingang n [die Anzahl von Multiplikationen < = 1000]

l1 l2

Text in [] zusammengefasst [Nummern (höchstens 10000 Dezimalziffern jeweils) multiplizieren] nicht erscheint in der Eingabedatei.

Ausgabe Die Ergebnisse der Multiplikationen.

Beispiel
Eingang:

5  
4 2  
123 43  
324 342  
0 12  
9999 12345  

Ausgang:

8  
5289  
110808  
0  
123437655 

Mein Code ist

import java.util.Scanner; 
import java.util.StringTokenizer; 

public class Main { 

public static void main(String[] args) 
{ 
    Main m=new Main(); 
    m.get(); 
} 

public void get() 
{ 
    Scanner sc=new Scanner(System.in); 
    int n=sc.nextInt(); 
    if(n<=1000) 
    { 
    sc.nextLine(); 
    String[] allNum=new String[n]; 
    for(int i=0;i<n;i++) 
     allNum[i]=sc.nextLine(); 
    StringTokenizer st; 
    for(int i=0;i<n;i++) 
    { 
     st=new StringTokenizer(allNum[i]," "); 
     int a=Integer.parseInt(st.nextToken()); 
     int b=Integer.parseInt(st.nextToken()); 
     System.out.println(mul(a,b,1)); 
    } 
    } 
} 
public int mul(int a,int b,int pow) 
{ 
    if(b==0) 
    return 0; 
    int s=b%10; 
    return (a*s)*pow+mul(a,b/10,pow*10); 
} 
} 

Vielen Dank im Voraus.

Antwort

0

Sie versuchen, eine 10K-Ziffer als Integer zu lesen, die nicht korrekt ist, d. H. Sie würde vom Integer-Limit überlaufen. Stattdessen würde ich BigInteger verwenden und multiply Methode verwenden, um zwei große Zahlen zu multiplizieren.

Also hier Ihre Zeilen:

int a=Integer.parseInt(st.nextToken()); 
int b=Integer.parseInt(st.nextToken()); 

Würde sich ändern

BigInteger a = new BigInteger(st.nextToken()); 
BigInteger b = new BigInteger(st.nextToken()); 
BigInteger result = a.multiply(b); 
+0

wie zu vergleichen, wenn (b == 0) \t \t return 0 arbeiten würde; \t \t int s = b% 10; –

+0

Sie brauchen nicht mul Methode überhaupt. Drucken Sie einfach Wert des Ergebnisses und Sie sollten fertig sein. FYI es wäre 'if (B.equals (BigInteger.ZERO)) zurückgeben 0; BigInteger s = b.mod (BigInteger.TEN); ' – SMA

+0

Jetzt ist das Zeitlimit überschritten. Schalte mein Leben. –

0

Die BigInteger Klasse uns Zahlen zu verarbeiten, ermöglicht mit vielen Ziffern N, wobei N eine beträchtlich hohe Zahl ist. Dies ist der Fall für ihre Werte Multiplikation int Änderung BigInteger

 BigInteger a = new BigInteger(st.nextToken()); 
     BigInteger b = new BigInteger(st.nextToken()); 
     BigInteger result = a.multiply(b); 
     System.out.println(result); 

MUI seine Methode so mit BigInteger

public BigInteger mul(BigInteger a,BigInteger b,BigInteger pow) 
{ 
    if(b.equals(BigInteger.ZERO)) 
     return new BigInteger("0"); 
    BigInteger s = b.mod(BigInteger.TEN); 
    BigInteger sx = a.multiply(b).add(pow); 
    return (s.multiply(sx).add(mul(a, b.divide(new BigInteger("10")), pow.pow(10)))); 
} 
+0

dies gibt mir "Zeit überschreitet". :( –

+0

die Fehlermeldung ist das? 'Java.lang.OutOfMemoryError: GC Overhead-Limit überschritten" –

Verwandte Themen