2017-12-19 7 views
-1

Trotz allem, was dieser Code ausgeführt istMultipliziert Vektorelemente in C++

int MaxPairwiseProduct(const vector<int>& numbers) { 
    int result = 0; 
    int n = numbers.size(); 
    for (int i = 0; i < n; ++i) { 
     for (int j = i + 1; j < n; ++j) { 
      if (numbers[i] * numbers[j] > result && numbers[i] * numbers[j] % 2 == 0) { 
       result = numbers[i] * numbers[j]; 
      } 
     } 
    } 
    return result; 
} 

tun, wenn ich 2 eingeben und die Elemente sind 90000 und 100000 ist der Ausgang 410.065.408 nicht 9000000000. Warum das?

+6

Welchen Wert hat 'std :: numeric_limits :: max()' auf Ihrem System? –

+0

Ich habe diese Methode nicht verwendet –

+2

Ich schlage vor, dass ein "int" auf Ihrem System nicht in der Lage sein kann, den Wert 9.000.000.000 zu speichern. –

Antwort

0

I long long int verwendet, um größere Größe zu erhalten für die Variablen

-2

Weil, wenn Sie Ihre ganze Zahl multiplizieren, ist es ausgehend von int Typ Grenzen. In diesem Fall verwendet long long Typen

long long MaxPairwiseProduct(const vector< long long >& numbers) { 
long long result = 0; 
int n = numbers.size(); 
for (int i = 0; i < n; ++i) { 
    for (int j = i + 1; j < n; ++j) { 
     if (numbers[i] * numbers[j] > result && numbers[i] * numbers[j] % 2 == 0) { 
      result = numbers[i] * numbers[j]; 
     } 
    } 
} 
return result; 

Bitte beachten Sie, dass, wenn Ihre Zahlen zu groß (größer als 2^63-1) nicht Standard C++ Typen verwenden können. Es gibt alle Typgrenzen C++ data types

+2

Diese "C++ Datentypen" sind, was Microsoft 2015-Compiler tut. Das bedeutet nicht, dass jeder Compiler das tun wird. C++ erlaubt einen viel größeren Satz möglicher Bereiche. –

Verwandte Themen