Einem Integer einen anderen Integer anfügen?
-
Hallo,
wie kann ich einer Zahl eine andere hinten anfügen? (Im Prinzip das selbe wie std::string operator +=). Danke!
-
Meinst du aus:
123 und 456 soll 123456 werden?int add_end(int a, int b) { std::ostringstream ss; ss << a; return (a * (ss.str().length() * 10)) + b; }...
int sum(int a, int b){ return a + b; }
-
Jau danke, das erste war's. Das zweite hätte ich mir noch denken können

-
Wobei du da einen Fehler reingebracht hast:
int add_end(int a, int b) { std::ostringstream ss; ss << b; return (a * (ss.str().length() * 10)) + b; }Anstatt <<a muss es <<b heisen.
-
a = 43 b = 500 43 * (2 * 10) + 500; 4300 + 500 4800 != 43500a = 43 b = 500 43 * (3 * 10) + 500 43000 + 500 43500 == 43500Hast recht

template <typename T> T add_end(T const & a, T const & b) { std::ostringstream ss; ss << b; return (a * static_cast<T>(ss.str().length() * 10)) + b; }geht aber natürlich nur bei Zahlentypen

std::cout << add_end(43, 500) << std::endl;
-
Und bevorzugterweise sollte man einen long als Datentyp wählen, da das Ergebnis sonst nicht hineinpasst

-
öh es müsste theorhetisch so heißen, oder:
long add_end(int a, int b) { std::ostringstream ss; ss << b; return a * std::pow(10.0, static_cast<double>(ss.str().length()) ) + b; }
-
Gelesen? Danke für die Hilfe!

-
Um die "Länge" der Zahl zu erhalten halte ich den Zehnerlogarithmus aber für angebrachter...
-
.filmor schrieb:
Um die "Länge" der Zahl zu erhalten halte ich den Zehnerlogarithmus aber für angebrachter...
ahhhh gar nicht dran gedacht, der ist in der Tat schöner, als die streamerei

-
Also, auf zu den Einzeilergefilden:
long add_end(int a, int b) { return a * std::pow(10.0, static_cast<int> (std::log10 (b)) ) + b; }Und long muss btw nicht reichen, auf normalen 32-Bit x86ern ist das genauso groß wie int. Und netterweise macht der Code auch noch komische Sachen, wenn man Zahlen mit unterschiedlichem Vorzeichen reinpackt.
boost::uint_t<sizeof(unsigned) * CHAR_BIT * 2>::least add_end (unsigned a, unsigned b) { return a * std::pow (10.0, unsigned (std::log10 (b))) + b; }Das mit der Typauswahl funktioniert glaub ich nicht so ganz, aber die Richtung stimmt
