2014-01-30 32 views
0

我的代碼在UVA在線判斷中出現運行時錯誤,但它在我的編譯器中運行正常。我不清楚問題出在哪裏。所以幫助我。以下是我的代碼。在UVA中反轉並添加運行時錯誤

class reverseAdd { 


public static int checkPalingdromMarker(long [] a1,long [] a2){ 
    int c=0; 
    for(int q=0;q<a2.length/2;q++){ 

     if(a1[q]!=a2[q]){ 

      break; 
     } 
     else c++; 

    } 
    if(c==(a2.length/2)) 
    { 
     return 1; 
    } 
    return 0; 
} 


public static void checkPalingdrom(long [] a1,long [] a2){ 
    int c=0; 
    for(int q=0;q<a2.length/2;q++){ 

     if(a1[q]!=a2[q]){ 
      System.out.println("Not Palingdrom"); 
      break; 
     } 
     else c++; 

    } 
    if(c==(a2.length/2)) 
    { 
     System.out.println("Palingdrom found"); 
    } 

} 

public static long [] reverseNumberDigits(long numToDigits){ 

     String string = Long.toString(numToDigits); 
     long[] digits = new long[string.length()]; 
     /* 
     for(int y = 0; y<string.length(); ++y){ 
      digits[y] = Long.parseLong(string.substring(y, y+1)); 
     } 
     */ 
     int reverse=0,i=string.length(); 
     while(numToDigits != 0) 
      { 
       reverse = reverse * 10; 
       digits[i-1] = reverse + numToDigits%10; 
       numToDigits = numToDigits/10; 
       i=i-1; 
      } 



    return digits; 
} 

public static long reverseNumber(long numberToReverse){ 
    long reverse = 0; 

    while(numberToReverse != 0) 
     { 
      reverse = reverse * 10; 
      reverse = reverse + numberToReverse%10; 
      numberToReverse = numberToReverse/10; 

     } 
    return reverse; 

} 


public static long [] readNumsFromCommandLine() { 
    Scanner s = new Scanner(System.in); 

    int count = s.nextInt(); 
    s.nextLine(); // throw away the newline. 
    long [] numbers = new long[count]; 

    for(int i = 0; i < count; i++){ 
     if(s.hasNextLong()){ 
      numbers[i] = s.nextLong(); 
      s.nextLine(); 
     } 
    } 

    return numbers; 
} 

public static void main(String[] args) { 
    long[] numbers = readNumsFromCommandLine(); 
    int inputLength=numbers.length; 


    for(int f=0;f<inputLength;f++){  

     int countAddition=1; 
     long a=numbers[f]+reverseNumber(numbers[f]); 
     for(int x=0;x<1000;x++){ 

     System.out.println(a); 
     if(checkPalingdromMarker(reverseNumberDigits(reverseNumber(a)), reverseNumberDigits(a))==0){ 
      countAddition++; 
      a=a+reverseNumber(a); 
     } 
     else{ 

      System.out.println(countAddition+" "+reverseNumber(a)); 
      break; 
     } 
     } 
    }  

}  
} 
+0

哪裏是Java堆棧跟蹤? – user1428716

+0

更改'public class reverseAdd' – vels4j

+0

請注意:Java中類名的約定是它們以大寫字母開頭,例如, '類ReverseAdd' - 順便說一句,你的意思是'迴文'? – Thomas

回答

0

UVa Online Judge對提交的代碼有特定的要求,才能正確編譯。你的代碼中有2個錯誤會阻止編譯。

更改代碼的第一行:

class reverseAdd { 

import java.util.*; 
class Main { 

注:我跑你的代碼,它會導致 「錯誤答案」 結果弗吉尼亞大學。

對於樣本輸入:

3 
24 1 
4358 754 
305 794 

預期輸出是:

34 
1998 
1 

你的代碼的(不正確)的輸出是:

4358 754 
305 794 
66 
1 66 
12892 
42713 
74437 
147884 
636625 
1163261 
2786872 
7 2786872 
808 
1 808