Von einem Integer-Array zu einem Integer
-
Hallo nochmal,
diesmal habe ich ein Programmier-Problem.
Ich habe ein Integer Array z.B. mit:
a[0]= 3
a[1]= 1
a[2]= 2gibt es eine Möglichkeit diese drei Zahlen auszulesen und hintereinander in einem Integerwert zusammenzufassen
Dass ich z.B. den Integer int = 312 habe???Vielen Dank nochmal
-
int total = 0; for (std::size_t i = 0; i < array_size; ++i) { total += array[i] * std::pow(10, i); }
(ungetestet)
-
#include <iostream> #include <cmath> int MakeInt(const char *arr, std::size_t size) { int result = 0; for (std::size_t i = 0; i < size; ++i) { result += arr[i] * (std::pow(10.0, static_cast<int>(size - i - 1))); } return result; } int main() { char a[3]; a[0] = 3; a[1] = 1; a[2] = 2; std::cout << MakeInt(a, sizeof(a)) << std::endl; return 0; }
-
Nathan schrieb:
std::pow(10, i);
Immer diese Anfänger hier. Das ist langsam und kann zu Rundungsfehlern führen. Davon abgesehen sind die Ziffern in der falschen Reihenfolge.
long long total = 0; for (auto digit : array) total = 10*total + digit;
-
Vielen Dank für die schnellen Antworten. Das hilft mi schon mal weiter
-
also funktionieren tut es... allerdings bin ich wohl doch zu viel Anfänger um nachvollziehen zu können was genau hier
result += arr[i] * (std::pow(10.0, static_cast<int>(size - i - 1)));
passiert...
google hat mir zwar verraten, dass pow eine Potenzierung bedeutet und static_cast wohl eine convertierung macht
aber warum funktioniert die Zeile denn und macht, was sie macht
-
arr[i] * (std::pow(10.0, static_cast<int>(size - i - 1)));
macht
Was der Cast da soll ist mir auch nicht ganz klar...
-
Der Cast ist notwendig, da std::pow keine Templatefunktion ist und daher nicht alle numerischen Typen abdeckt.
-
Seit C++11 schon.
-
Danke euch