Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: 2 ja 3 = 23?

tuomas11 [05.07.2008 22:26:24]

#

Niin, eli millä tavalla oikein saisin c++:ssa yhdistettyä kahden int-muuttujan arvon yhdeksi uudeksi int-muuttujaksi? Esimerkiksi jos minulla on muuttujat int luku1 = 2 ja int luku2 = 2, niin int luku3:sen tulisi olla 22. Miten tuo olisi kätevintä tehdä?

TsaTsaTsaa [05.07.2008 22:46:01]

#

Merkkijonovirroilla onnistuu seuraavasti:

#include <sstream>
#include <string>
#include <iostream>

using namespace std;

int yhdista(int eka, int toka)
{
   int kolmas = 0;

   ostringstream os;
   os << eka << toka;
   string tmp = os.str();

   istringstream is(tmp);
   is >> kolmas;

   return kolmas;
}

// esimerkki
int main()
{
   int a = 39;
   int b = 3;

   cout << yhdista(a, b) << endl; // tulostuu "393"

   return 0;
}

petrinm [05.07.2008 23:00:48]

#

Jos numeroilla haluat leikkiä, niin laskukaava on tälläinen:
luku3 = luku1 * 10Int(log luku2)+1 + luku2

Antti Laaksonen [05.07.2008 23:17:34]

#

Ja tässä on samaan kaavaan liittyvä ohjelma:

int a = 123, b = 456;
int c;
int k = 10;
while (k <= b) k *= 10;
c = a * k + b;
printf("%i\n", c);

Luvut voidaan yhdistää kertomalla a sopivalla kymmenen potenssilla ja lisäämällä tulokseen b. Sopiva kymmenen potenssi löytyy katsomalla, mikä on pienin kymmenen potenssi, joka on b:tä suurempi. Esim. kun a = 123 ja b = 456, pienin b:tä suurempi kymmenen potenssi on 1000 ja 123 * 1000 + 456 = 123456.

tuomas11 [06.07.2008 17:03:23]

#

Kiitoksia kaikille vastanneille. :)

Jalmari91 [09.07.2008 22:46:03]

#

Voihan sitä myös leikkiä itoa:lla ja atoi:lla =)

Metabolix [10.07.2008 06:22:13]

#

C:llä merkkijonovirtoja vastaava menetelmä:

char str[21];
sprintf(str, "%d%d", a, b);
sscanf(str, "%d", &c);
printf("Ja katso, %d%d = %d.\n", a, b, c);

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta