C Mehr als 3 stellige Armstrong Zahlen ermitteln

Noared

Newbie
Dabei seit
Nov. 2009
Beiträge
2
Hallo, ich habe vorher eher nur ab und zu im Forum mitgelesen und das ist jetzt mein erster Beitrag.

Ich bringe mir gerade C selber, dh. habe ich noch nicht wirklich viel Erfahrung.
Also ich habe folgenden Code geschrieben der die Aufgabenstellung erfühlt, allerdings verstehe ich nicht ganz wieso er nur für 3 stellige Zahlen funktioniert.

(Armstrong Zahlen sind z.B. 153 also 1^3 + 5^3 + 3^3 = 153. Weitere (zum überprüfen) sind u.a. 370, 371, 407, 1634, 8208, 9474)

Code:
int main() {
int z1,summe,x,urZahl;

summe=0

printf(“Geben sie eine Zahl ein die überprüft werden soll: ”);
scanf(“%d”,&z1);

urZahl=z1;

while(z1!=0){
x=z1%10;
summe=summe+x*x*x;
z1=z1/10;
}

if(summe==urZahl){
printf(“Dies ist eine Armstrong Zahl!”);
}
else {
printf(“Dies ist KEINE Armstrong Zahl”);
}

getch();

retunr 0;
}
Gibt es eine (einfache) möglichkeit diesen Code so umzuwandeln damit er auch mit 4 und 5 stelligen Zahlen funktioniert?
 
D

DunklerRabe

Gast
Das funktioniert deswegen nicht, weil du ja in "summe=summe+x*x*x" festlegst, dass es nur für dreistellige Zahlen gehen kann. Bei vierstelligen Zahlen muss die Potenz ja 4 sein und nicht mehr 3.
Das ist nicht schwer umzusetzen für n-stellige Zahlen, ich versuch das gleich mal "im Kopf", hab keinen C Compiler da. :D
Wenn du den Ausdruck um weitere "*x" erweiterst, funktioniert das für jeden weiteren Schritt mit einer um 1 größeren Potenz, aber auch NUR mit dieser Potenz, so wie es gerade nur mit 3 geht.
 

hasugoon

Commander
Dabei seit
Juni 2004
Beiträge
2.797
sum=sum+x^lengthof(urZahl)

und das ganze halt in c :)

sind btw. lustige zahlen, höre ich heute das erste mal davon.
 

Joker*

Lt. Junior Grade
Dabei seit
Nov. 2009
Beiträge
352
Hallo,

ich glaube, du brauchst zwei Dinge: einen Zähler, der die aktuelle Dezimalstelle enthält und (da C keinen Operator für Potenzen kennt) eine "Umschreibung" der Potenzierung durch eine weitere Schleife.

Ich habe der Einfachheit halber einfach "**" als Potenz-Operator verwendet, damit´s übersichtlich bleibt.

Bin kein C- oder Mathe-Freak, bitte um Korrektur, falls es nicht stimmen sollte.

Code:
int main() {
int [B]s,[/B] z1,summe,x,urZahl;

summe=0

printf(“Geben sie eine Zahl ein die überprüft werden soll: ”);
scanf(“%d”,&z1);

urZahl=z1;

while(z1!=0){
[B]s=s+1[/B]
x=z1%10;
summe=summe+x[B]**s[/B];
z1=z1/10;
}

if(summe==urZahl){
printf(“Dies ist eine Armstrong Zahl!”);
}
else {
printf(“Dies ist KEINE Armstrong Zahl”);
}

getch();

return 0;
}
 

hasugoon

Commander
Dabei seit
Juni 2004
Beiträge
2.797
in c gibts doch pow() ? und so wie ich das verstanden habe, bleibt die potenz für jede stelle gleich. (also s=konstant für eine eingabe)
 
Zuletzt bearbeitet:

Noared

Newbie
Ersteller dieses Themas
Dabei seit
Nov. 2009
Beiträge
2
Ok, der Fehler ist mir selbst gerade auch gekommen als ich meinen Code nochmal gelesen habe. (Hatte vorher alles in einzelen Funktionen und den Code fürs posten in die main gepackt darum hab ich es vorher einfach übersehen).

Habe es jetzt über meine eigene pow() realisiert.

Code:
(...)
int ownpow(int i,long x){
    long s=1;
    do{
               s*=x;
               i--;
               }
    while(i!=0);
    
    return s;
}
Danke für die schnelle Hilfe.
 
Top