Ich nahm die Codility.com demo test.Verwirrt über Codility Demo-Test
Mein Programm zurückgegeben den falschen Wert für eine der Unit-Tests:
TEST extreme_large_numbers Sequenz mit extrem großen Zahlen Test arithmetischen Überlauf.
ZEIT 0,056 s.
RESULT FALSCHE ANTWORT bekam 2, aber es ist nicht Gleichgewichtspunkt, sum [0..1] = 4294967294, sum [3..3] = - 2
Ok, da ich couldn Wenn ich das Problem zuerst in meinem Code sehe, habe ich versucht, es in einem Visual Studio-Projekt auszuführen. Dann stellte der Compiler fest, dass 4294967294
für eine int
zu groß war. Es muss ein uint
oder ein long
sein. Also änderte ich alles auf long
und es funktionierte in VS.
Mit dem Demotest können Sie die Funktionseingabe-/Rückgabetypen jedoch nicht auf long
ändern.
- 2.147.483.647 (größte 32-Bit-int)
- 4294967294 (Zahl von Codility.com Unit-Test gegeben)
Kann jemand bitte erklären, wie dieses Programm möglicherweise richtig mit 4294967294
arbeiten kann als einer der Datenwerte in einem int[]
?
1. Ich stimme zu, dass meine Lösung nicht die effizienteste ist, aber ich bin kein brillanter Programmierer und es ist nur 30 Minuten! 2. Ich glaube nicht, dass Sie meine Frage beantwortet haben. Wie kann ich Werte vergleichen, wenn ich keinen ausreichend großen Datentyp habe, um '4294967294' zu speichern? – JohnB
1. Ich habe nur darauf hingewiesen ... 2. Sie nicht, das sind in der Tat negative Werte, aber die Summen großer Werte überschreiten den "int" -Bereich. – Lucero
Ich sehe ... '2147483647 * 2 = 4294967294' Sie sind absichtlich blasen die 'int'-Datentyp :( – JohnB