2016-09-28 3 views
-1

Ich verwendete C++ für die Lösung von Problem, Kodulmität PermissingElem. Ich habe xor nicht verwendet, nur die Summe der Reihenfolge.Ich kann nicht verstehen, Kodulität PermissingElem falsch mit C/C++

C++

int solution(vector<int> &A) { 
     // write your code in C++11 (g++ 4.8.2) 
     int n = A.size(); 
     long long sum = ((n+1)*(n+2))/2; 
     for(int i=0; i<n; i++) { 
      sum -= A[i]; 
     } 
     return (int)sum; 
    } 

Es ist in 80% der Test-Ergebnis führen zu großen Test nicht bestanden = ~ 100000
Falsche Antwort Beispiel

bekam -2147483647 erwartet 1

Wenn Sie jedoch java verwenden, ergibt sich 100%.

java

public int solution(int[] A) { 

      long N = A.length + 1; 
      long total = N * (N + 1)/2; 

      for (int i : A) { 

       total -= i; 
      } 

      return (int)total; 
     } 

Was ist der Unterschied zwischen C++ und Java? Ich verwendete Datentyp der Summe, lang, lang lang, lang lang int ..

Thx.

+1

Warum geben Sie eine lange als Int zurück? Was ist, wenn es größer als der mögliche Wert des Int ist? – Annabelle

+0

Vielleicht könnte das Kompilieren von 64bit helfen –

+0

Ist 'sum = ((n + 1) * (n + 2))/2' eigentlich gleichzusetzen mit' total = N * (N + 1)/2'? – wally

Antwort

0

Sie speichern n in einem int. Also, wenn Sie es quadrieren, haben Sie immer noch eine Int. Dann weisen Sie diesem Int eine lange, lange Summe zu, aber es ist zu spät, weil bereits ein Überlauf aufgetreten ist.

+0

Danke! Oh ... ich hatte nicht darüber nachgedacht .. ich löste :) – fisache

Verwandte Themen