Getallen die een getal bevatten

  • Onderwerp starter Onderwerp starter JoZ1
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JoZ1

Terugkerende gebruiker
Lid geworden
17 dec 2010
Berichten
3.418
Beste C++-kenners.

Ik ben een boek aan 't lezen om mijn C++-kennis wat uit te breiden (C++ - L. Ammeraal).
Het boek bevat ook opgaven, zoals deze:

"Lees een decimaal cijfer d in en druk alle positieve gehele getallen x kleiner dan 100 af waarvoor geldt dat het cijfer d voorkomt in de decimale notatie van zowel x als x2. Druk telkens naast x ook x2 af. Als d bijvoorbeeld gelijk aan 2 is, dan zal de regel:

82 6274

in de uitvoer voorkomen, want 2 komt zowel in 82 als in 6274 voor (en 822 = 6724)."

Nu begrijp ik deze opdracht wel, alleen het uitvoeren ervan is lastig. Hoe controleer ik of een getal in een ander getal voorkomt?

Code tot nu toe:
[CPP]cout << "Geef een getal.";
double d;
cin >> d;

//Elke waarde x en x^2 die d bevat.
for (x=1;x<100;x++){
//Hier controleren
}[/CPP]

Ik hoop dat iemand me op weg kan helpen.
 
Door een getal modulo 10 te doen krijg je het laatste cijfer van het getal. Door een getal te delen door 10 vervalt het laatste getal.
Bij 6274 bijvoorbeeld krijg je dus:
6274 % 10 = 4
6274 / 10 = 627
627 % 10 = 7
627 / 10 = 62
62 % 10 = 2
...enz.

Je zal dit wel moeten doen met een int en niet met een double. Omdat een double decimalen heeft werkt de modulo-operator (%) niet.
 
Je zal dit wel moeten doen met een int en niet met een double. Omdat een double decimalen heeft werkt de modulo-operator (%) niet.
Hmm, dan klopt de opdracht niet.

De volgende opdracht vond ik ook al vreemd:
"Lees een geheel getal in en druk de som van de laatste twee decimale cijfers af."
Maar als het een geheel getal is, heeft het toch geen decimale cijfers :confused:


In ieder geval hartstikke bedankt voor het antwoord! Ik laat het weten als het gelukt is :)

[edit]Ik heb toch nog een vraag betreft je antwoord.

- Stel dat ik het getal 74 wil vinden in 6274, kan dat dan ook?
Want de opdracht vraagt daar wel om, toch?[/edit]
 
Laatst bewerkt:
Een geheel getal heeft geen decimalen (getallen achter de komma), het kan wel decimale (of hexadecimale of octale of binaire) getallen bevatten.

Als je de laatste twee cijfers van een getal wil weten doe je het getal modulo 100 (% 100) (en deel je nog steeds door 10).
 
Bedankt! Ik zal er zeker naar kijken. Maar pas over twee weken (vakantie...). :)
Voor nu is de vraag opgelost!
 
Ik heb het bij nader inzien gedaan met string::find, omdat ik dat makkelijker vond dan de modulo-methode.

[cpp]#include <iostream>
#include <sstream>

using namespace std;

string convertInt(int number)
{
stringstream ss;
ss << number;
return ss.str();
}

int main()
{
stringstream sstream;
int nInt;
string nStr;

cout << "Geef een getal: ";
cin >> nInt;
nStr = convertInt(nInt);

//Elke waarde x en x^2 die nInt bevat.
for (int x = 1; x<100; x++){
//Hier controleren
if(string::npos != convertInt(x).find(nStr) &&
string::npos != convertInt(x*x).find(nStr)){
cout << x << " " << x*x << endl;
}
}

system("PAUSE>NUL");
return 0;
}
[/cpp]

Op-/aanmerkingen zijn welkom :)

[edit] Ik heb de modulo-methode wel in de opdracht over de laatste twee decimalen (zie post #3) kunnen verwerken:

[cpp]#include <iostream>
using namespace std;

int main()
{
cout << "Geef een getal: ";
int input;
cin >> input;

int dig1, dig2;
dig1 = input % 10;
input /= 10;
dig2 = input % 10;

cout << "Som van laatste twee decimale getallen: "
<< dig1 + dig2 << endl;


system("PAUSE>NUL");
return 0;
}[/cpp][/edit]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan