Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.01.2010, 13:03

Ziffern einer Int-Zahl

ich will eine Int-Zahl so "zerhacken" das ich sowas rausbekomme:
hunderter: 2
Zehner:3
Einer:5
gibt es eine leichtere lösung als immer die größten abzuziehen und mitzuzählen, bis man die höchste stelle wegsubtrahiert hat und dann immer so weiter machen also ich meine:

C-/C++-Quelltext

1
2
3
4
5
6
7
int Zahl =  520;
int Ziffer = 0;
while(Zahl >=100)
{
  Ziffer ++;
  Zahl -= 100;
}

usw.
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

10.01.2010, 13:14

Ich werf mal Division und Modulo als Stichworte in den Raum ;)

XelVair

Frischling

Beiträge: 46

Beruf: Student

  • Private Nachricht senden

3

10.01.2010, 14:58

Hab mich mal drangesetzt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;

int Number;

int CalcFirstdigit(int IncomingNumber) // Kalkuliert die Hunderter Stelle

{
int CalcFirstdigit = ((IncomingNumber -(IncomingNumber % 100)) / 100);
return CalcFirstdigit;
}

int CalcSeconddigit (int IncomingNumber) //Kalkuliert die Zehner Stelle

{
int CalcSeconddigit = (((IncomingNumber % 100)) - ((IncomingNumber % 100)%10))/10;
return CalcSeconddigit;
}

int CalcThirddigit (int IncomingNumber) //Kalkuliert die Einer Stelle

{
    while (IncomingNumber > 10)
    {
    IncomingNumber = IncomingNumber - 10;   // :P

    }
int CalcThirddigit = IncomingNumber;
return CalcThirddigit;
}

int main ()
{
cout << "Bitte geben sie eine Zahl zwischen 100 und 999 ein: ";
cin >> Number;
cout << CalcFirstdigit(Number) << endl;
cout << CalcSeconddigit(Number) << endl;
cout << CalcThirddigit(Number) << endl;
system("PAUSE");
}


Den richtigen Weg für die einerstelle darfst du selber ertüfteln :P

Übrigens, ich hatte ein paar probleme mit der ausgabe als ich

C-/C++-Quelltext

1
int CalcSeconddigit = ((IncomingNumber % 100)) - ((IncomingNumber % 100)%10)/10;

benutzte, da bekam ich nämlich 23 für 123, nachdem ich aber noch eine Einklammerung hinzugefügt hatte, ging es:

C-/C++-Quelltext

1
int CalcSeconddigit = (((IncomingNumber % 100)) - ((IncomingNumber % 100)%10))/10;


Jemand eine Idee warum? o_O

Sorry für Offtopicness, aber ich fände es unnütig wenn ich dafür einen neuen Thread machen würde.[/cpp]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

10.01.2010, 15:01

warum lässt du ihn nicht einfach in einen string umwandeln und gibst die einzelnen stellen aus?

https://www.spieleprogrammierer.de/phpBB…3018&highlight=
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

10.01.2010, 15:06

@XelVair
WTF? - Mit den Tipps von dot ist das ganze für beliebig grosse Zahlen 2-3 Zeilen..

/EDIT
Ist nicht böse gemeint, gell.
Aber probiert das mal mit den genannten Tipps!

XelVair

Frischling

Beiträge: 46

Beruf: Student

  • Private Nachricht senden

6

10.01.2010, 15:11

Zitat von »"drakon"«

@XelVair
WTF? - Mit den Tipps von dot ist das ganze für beliebig grosse Zahlen 2-3 Zeilen..

/EDIT
Ist nicht böse gemeint, gell.
Aber probiert das mal mit den genannten Tipps!


Ja, das kam mir auch, nachdem ich den Post submittet hatte, tut mur leid, war gerade in Handlungszwang, weil dies eines der wenigen Probleme ist, bei dem ich mitreden kann :(

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

10.01.2010, 15:12

ja okay...

Quellcode

1
2
3
4
5
6
7
8
int integer = 12345;
int i = 0;

while(integer >= 0)
{
cout << "stelle " << ++i << ": " << integer%10 << endl;
integer /= 10;
}

lol gerade erst aufgestanden >.<

sollte man die einzelnen ziffern zwischenspeichern hat man nen string den einem sprintf zurück geben würde^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

10.01.2010, 15:27

Zitat von »"NachoMan"«

ja okay...

Quellcode

1
2
3
4
5
6
7
8
int integer = 12345;
int i = 0;

while(integer >= 0)
{
cout << "stelle " << ++i << ": " << integer%10 << endl;
integer /= 10;
}

lol gerade erst aufgestanden >.<

sollte man die einzelnen ziffern zwischenspeichern hat man nen string den einem sprintf zurück geben würde^^


Dieser Algorithmus ist nur was für Leute mit vieeel Zeit! :-P

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

10.01.2010, 15:29

hab nicht gesagt dass es schnell ist xD
mein erster vorschlag war glaub ich die einfachste und schnellste lösung.

aber david wie würdest du es machen?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

10.01.2010, 15:30

Zitat von »"NachoMan"«

hab nicht gesagt dass es schnell ist xD
mein erster vorschlag war glaub ich die einfachste und schnellste lösung.


Aber dein Algo wird nicht in endlicher Zeit beendet... Das ist für die meisten Fälle unzureichend! ;)

Edit:

Zitat

aber david wie würdest du es machen?

Ich würds so machen:

C-/C++-Quelltext

1
2
3
4
5
do
{
    std::cout << "stelle " << ++i << ": " << integer%10 << std::endl;
    integer /= 10;
}  while ( integer );

Werbeanzeige