Ich versuche, eine Funktion in C++ zu schreiben, die Armstrong-Nummern in einem Bereich von eins bis zu wo von einem Benutzer angegeben erkennt und druckt. Es gibt auch zurück, wie viele es als Integer gibt. Die größte Zahl, zu der es gelesen wird, ist 9.999.Armstrong-Nummer Drucken Fehler
Das Problem, das ich habe, ist, dass es jede Armstrong-Nummer bis 8208 erkennt, aber nicht 9474, die beide Armstrong-Nummern sind. Das führt zu großer Verwirrung, da ich die Zahlen basierend auf der Anzahl der Ziffern verarbeite. Wenn sie 8208 erfolgreich identifiziert, sollte sie auch 9474 identifizieren.
Hier ist mein Code:
int isArmstrongNum(int range){
int count = 0;
int ones;
int tens;
int hundreds;
int thousands;
if(range < 1 || range > 9999){
cout << "invalid entry" << endl;
return 0;
}
for(int i = 1; i < range; i++){
if(i < 10){
if(pow(i, 1) == i){
count++;
cout << i << endl;
}
}
else if(i > 9 && i < 100){
ones = i % 10;
tens = (i - ones)/10;
if(pow(ones,2) + pow(tens,2) == i){
count++;
cout << i << endl;
}
}
else if(i > 99 && i < 1000){
ones = i % 10;
tens = ((i % 100) - ones)/10;
hundreds = (i - tens * 10 - ones)/100;
if(pow(ones,3) + pow(tens, 3) + pow(hundreds,3) == i){
count++;
cout << i << endl;
}
}
else if(i > 999 && i < 10000){
ones = i % 10;
tens = ((i % 100) - ones)/10;
hundreds = ((i % 1000) - tens*10 - ones)/100;
thousands = (i - hundreds * 100 - tens * 10 - ones)/1000;
if(pow(ones,4) + pow(tens, 4) + pow(hundreds, 4) +
pow(thousands, 4) == i){
count++;
cout << i << endl;
}
}
}
return count;
}
Jede Idee, warum es so verhält? Vielen Dank.
Wenn Sie gebeten wurden, Amstrong Number bis 1000000 zu finden, werden Sie immer noch so viele variable und bedingte Anweisungen erstellen? Ich schlage vor, Sie sollten zuerst Ihr Programm verallgemeinern. – Ishpreet
Verwenden Sie 'pow' nicht, um eine ganze Zahl zu quadrieren - verwenden Sie' x * x'. Ähnlich für die anderen kleinen ganzzahligen Potenzen. –
Sie sollten die Funktion umbenennen, da es irgendwie irreführend ist ... – pmaxim98