2011-03-25 87 views
6

在SPOJ上運行以下代碼時,出現運行時錯誤(NZEC)。如果你們中的任何人願意指出發生了什麼,我會非常感激。簡單代碼中的運行時錯誤(NZEC)

//0<=A<=B<=10^18, 1<=N<=10^18 
using System; 
class any 
{ 
static void Main() 
{ 
    long t = long.Parse(Console.ReadLine()); 
    ulong a, b, n; 

    for(long k = 0; k < t; k++) 
    { 
     string[]s = Console.ReadLine().Split(' '); 
     a = ulong.Parse(s[0]); 
     b = ulong.Parse(s[1]); 
     n = ulong.Parse(s[2]); 
     Console.WriteLine(diviEntre2(a, b, n)); 
    } 
} 
static ulong diviEntre2(ulong f, ulong c, ulong n) 
{ 
    ulong k, s, m; 

    if (f == c && c % n == 0 && f != 0) k = c/n; 

    else 
    { 
     s = f/n; 
     m = c/n; 

     k = m - s; 
    } 

    return k; 
} 
} 
+0

請標記正確的答案,如果你有一個:) – 2014-08-18 17:51:27

回答

2

我不知道java的主函數是什麼時候返回void,但這可能是這個錯誤信息的原因。 Spoj還檢查你的程序的返回值,它期望0(成功/非錯誤代碼)。 我想改變你的主要功能返回0將修復此錯誤消息。

我只是有一個C程序的同樣的錯誤,並添加一個返回0更改錯誤接受。

19

NZEC代表非零退出代碼。對於C用戶,如果您的主要方法沒有返回0,則會生成此消息;聲明。其他語言如Java/C++如果拋出異常,則可能會產生此錯誤。

8

對於Java,當代碼拋出異常時返回NZEC。對於Spoj等問題,如果測試用例未被標識符字符串終止,輸入中的最後一行通常會導致此異常。

對於這樣的情況,一個有用的黑客就是把你的代碼包裝在try-catch中,並且如果有異常就簡單地返回。被捕獲的異常表明您已達到輸入結尾。

public static void main(String[] args) { 
    temp program = new temp(); 
    try{ 
    program.begin(); 
    } catch(Exception e){ 
     return; 
    } 
} 
+0

即時通訊想知道這是否會運行代碼的最後一個測試用例? – coderVishal 2015-01-11 02:47:21

1

此錯誤也可能意味着程序不能正常工作就是輸出不是預期的輸出...信不信由你,這是你的代碼只是沒有做什麼的問題有很大的可能性它要求到....

從末給出的鏈接報價 - >

NZEC(非零退出代碼) - 有助於從WA告訴崩潰與 解釋型語言; WA =錯誤的答案。

請訪問以下鏈接The SPOJ System

7

我在編程在Java中有相同的消息。事實證明,我應該把我的源代碼放在默認包中(或者根本不要改變包)。我希望這可以幫助別人。

+0

那麼你的第二個解決方案是什麼? – 2012-12-02 15:16:08

+0

@tAmirNaghizadeh對不起,我不明白這個問題。我在我的java文件的頂部有'package problems.tutorial'。 SPOJ報告NZEC是因爲該線。當我刪除它時,程序被評估得很好。 – 2012-12-11 20:07:09

-1

我在問題'EKO'的cpp程序上獲得了NZEC。我在int main()聲明之前發佈了一個數組聲明。我在主函數中移動了聲明,解決方案被接受了。

我通常在main函數之外有數組聲明,但在這種情況下數組是一個很大的數組(int array[100001])。所以可以在main中聲明你的數組。