Erledigt Danke n stellige Zahl einlesen mit schleife Quersumme bilden
-
Hallo
Schreiben Sie ein Programm, das eine dreistellige Zahl einliest
und mit Hilfe der Ziffernsumme überprüft, ob die eingegebene Zahl durch 3 teilbar ist.das ist die genaue Angabe,
lg
markus
-
markuswenczel schrieb:
Idee?
Hab ich. Du auch? du hast schon alles genannt, was du benötigst. Versuchs mal.
-
int Quersumme(int val) { int rval = val % 10; while (val /= 10) rval += val % 10; return rval; }
-
int C(int i){return i?i%10+C(i/10):i;}
-
Michael E. schrieb:
markuswenczel schrieb:
Idee?
Hab ich. Du auch? du hast schon alles genannt, was du benötigst. Versuchs mal.
habs versucht aber irgendwie komm ich nicht darauf
wie kann ich mittels Schleife überprüfen ob die Zahl
n stellig ist in meinem Beispiel 3 Stellen hatdie Quersumme ist mit Modulo und + Operator ok
aber die Überprüfung auf die Stellenanzahl check ich nicht
-
Dobi schrieb:
int C(int i){return i?i%10+C(i/10):i;}
Jetzt musst du nur noch den Funktionskopf im alten C-Stil schreiben und alle Sonderzeichen durch Trigraphsequenzen ersetzen, dann ist es perfekt.
-
markuswenczel schrieb:
habs versucht aber irgendwie komm ich nicht darauf
wie kann ich mittels Schleife überprüfen ob die Zahl
n stellig ist in meinem Beispiel 3 Stellen hat[...]
aber die Überprüfung auf die Stellenanzahl check ich nicht
Ich glaube mit einer Schleife bist du auf dem falschen Weg. Wodurch zeichnen sich denn dreistellige Zahlen aus? Sie liegen zwischen 100 und 999! Formulier das mal allgemein für alle möglichen Stellenzahlen (das kann dann wieder eine Schleife sein) oder schreib es direkt hin für alle Möglichkeiten (so viele Stellen kann ein int nämlich in der Regel nicht aufnehmen, ein paar Zeilen Copy&Paste reichen für alle Möglichkeiten).
edit: Oder wenn es mit Schleife sein soll: Dreistellige Zahlen kann man genau zwei mal durch 10 teilen und es kommt etwas zwischen 1 und 9 heraus.
-
markuswenczel schrieb:
habs versucht aber irgendwie komm ich nicht darauf
wie kann ich mittels Schleife überprüfen ob die ZahlEvtl etwas tricky, aber du könntest zb dein int in einen string umwandeln, entweder über einen vektor oder einfacher, über stringstreams und dann die größe des strings ermitteln, mal die schleife außen vor gelassen
-
Sorex schrieb:
Evtl etwas tricky, aber du könntest zb dein int in einen string umwandeln, entweder über einen vektor oder einfacher, über stringstreams und dann die größe des strings ermitteln, mal die schleife außen vor gelassen
-
SeppJ schrieb:
Dobi schrieb:
int C(int i){return i?i%10+C(i/10):i;}
Jetzt musst du nur noch den Funktionskopf im alten C-Stil schreiben und alle Sonderzeichen durch Trigraphsequenzen ersetzen, dann ist es perfekt.
Ich find Digraphen schöner. Smileys im Code sind immer gut, auch wenn sie beim Golfen nicht helfen.
Den alten C-Stil akzeptiert mein g++ leider nicht.
-
SeppJ schrieb:
Sorex schrieb:
Evtl etwas tricky, aber du könntest zb dein int in einen string umwandeln, entweder über einen vektor oder einfacher, über stringstreams und dann die größe des strings ermitteln, mal die schleife außen vor gelassen
Ok, da ich gerade gesehen habe, dass es sich immer um eine 3-stellige Zahl handelt, muss ich dir an dem Punkt recht geben
-
Dobi schrieb:
Den alten C-Stil akzeptiert mein g++ leider nicht.
Ist in C++ auch verboten, aber deine Funktion könnte ja genausogut auch C sein. Könntest du mit extern C einbinden.
-
Was ist der "alte C Stil"?
-
314159265358979 schrieb:
Was ist der "alte C Stil"?
Google: old c style function declaration
Kommt übrigens besonders gut mit Default-int (der gilt nicht nur für den Rückgabetypen, sondern auch für die Parameter), um unlesbare Programme zu schreiben.
-
C(i)??<return i?i%10+C(i/10):i;??>
Geht das noch "besser"?
Edit: Sorry, ist OT und lässt sich auch gar nicht mit einem C++ Compiler kompilieren - dennoch würds mich irgendwie interessieren
-
Statt i würde ich _ als Variablenname verwenden. Und die Funktion könnte man __ nennen. Und vielleicht an "geeigneten" Stellen umbrechen:
__( _)??< return _?_%10+ __(_/10 ):_; ??>
-
lol
-
#include <iostream> using namespace std; int main(void){ cout<<"Dreistellige Zahl eingeben:"<<endl; int h=100,k=0; cin>>h; for(int l=10;l<10000;l*=10) k+=(h%l-k)/(l/10); k%3==0? cout<<"Die Zahl ist durch drei teilbar."<<endl: cout<<"Die Zahl ist kein Vielfaches von drei..."<<endl; return 0; }
Passt perfekt auf'n Titel.
-
SeppJ schrieb:
__( _)??< return _?_%10+ __(_/10 ):_; ??>
#define oO return
-
Haha, sehr schön, SeppJ. Hast du mal beim ioccc mitgemacht?
Edit: Mist, im Topic steht ja was von "mit Schleife". Man könnte aus dem code bestimmt auch ascii art machen, die wie ne Schleife an einem Geschenk aussieht.