Ich habe das folgende Problem - Ich schrieb eine Funktion, die eine Zeichenfolge und konvertiert es in ein int, aber ich weiß nicht, wie überprüft werden, ob ein Überlauf auftritt. Ich möchte den letzten möglichen Wert der Ganzzahl zurückgeben, bevor der Überlauf aufgetreten ist. Zum Beispiel: wenn ich eine String-Repräsentation von "2147483648" habe, möchte ich 214748364 als int zurückgeben, weil in der nächsten Iteration ein Überlauf auftreten wird. Hast du irgendwelche Ideen, wie du das lösen kannst?Zeichenkette manuell in int umwandeln und prüfen, ob in C/C++ ein Überlauf aufgetreten ist?
Mein Code ist:
int main() {
string s = "2147483647";
int num = 0, i = 0, buff = 0;
bool isNegative = false;
if (s[0] == '-') {
isNegative = true;
i++;
}
while (i < s.length()) {
if (num < (INT_MAX/10)) {
num *= 10;
}
if (num < INT_MAX - 10)
num += s[i++] - '0';
else
break;
}
if (isNegative)
num = -num;
cout << "\nthe number is: " << num;
getch();
return 0;
}
Können Sie mir zeigen mehrere Ein- und Ausgänge, die gewünscht werden, und oder erklären, was Sie näher wollen. Es scheint einen einfacheren Weg zu geben, dies zu tun. – stackoverfloweth
Sie können den Wert von 'num' * vor * mit 10 multiplizieren. Fangen Sie das Überlaufereignis, bevor es passiert. –
Dürfen wir annehmen, dass die Verwendung bereits existierender Funktionen wie 'std :: stoi' und' strtol' nicht erlaubt ist? – user4581301