Podejrzewam, że winowajcą tutaj jest porównywanie liczb zmiennoprzecinkowych, także wyniku działania na liczbach tego typu, bezpośrednio z zerem [== 0] zamiast z wartością przybliżoną +- małym błędem epsilon [>-epsilon && <+epsilon].
Niewiadomą jest dlaczego po skompilowaniu pod jednym kompilatorem wynik jest ok, a pod innym nie. Może to nie do końca "wina" samych, różnych, kompilatorów, ale np różnego ustawienia opcji [poziomu] optymalizacji przy ich uruchamianiu przez system SPOJ. Trzebaby o to zapytać adminów: contact@spoj.com