2017-04-13 3 views
0

Dieses Programm zeigt 153 nicht als Armstrong-Nummer, während für andere Zahlen die Ausgabe korrekt ist. Wie ich für 407 überprüft habe, gab es die richtige Antwort, aber als ich 153 überprüfte, zeigte es keine Armstrong-Nummer.C-Programm für Armstrong-Nummer mit falschem Ausgang

#include <stdio.h> 
#include <math.h> 

int main() { 
    int no, copy, re, n = 0, ans = 0; 

    printf("\n\tEnter a new number: "); 
    scanf("%d", &no); 

    copy = no; 

    while (copy != 0) { 
     copy = copy/10; 
     n++; 
    } 
    copy = no; 

    while (copy != 0) { 
     re = copy % 10; 
     ans = ans + pow(re, n); 
     copy = copy/10; 
    } 

    if (ans == no) { 
     printf("\n\t %d is an Armstrong number", no); 
    } else { 
     printf("\n\t %d is not an Armstrong number", no); 
    } 
    getch(); 
    return 0; 
} 
+0

Haben Sie Ihren Code Zeile für Zeile in einem Debugger durchlaufen? Das ist der richtige Weg, um solche Probleme zu debuggen und nur um Hilfe zu bitten, nachdem Sie alle Anstrengungen unternommen haben, sich selbst zu debuggen. – kaylum

+0

Ihr Code enthält eine beliebige Nummer, die ich als Armstrong angegeben habe. – Marievi

+0

1) Code einrücken 2) Benennen Sie Ihre Variablen richtig. –

Antwort

1

Zunächst einmal müssen Sie richtigen Namen geben für variable

Versuchen Sie, diese Code es funktioniert für mich

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    int number, originalNumber, remainder, result = 0, n = 0 ; 

    printf("Enter an integer: "); 
    scanf("%d", &number); 

    originalNumber = number; 

    while (originalNumber != 0) 
    { 
     originalNumber /= 10; 
     ++n; 
    } 

    originalNumber = number; 

    while (originalNumber != 0) 
    { 
     remainder = originalNumber%10; 
     result += pow(remainder, n); 
     originalNumber /= 10; 
    } 

    if(result == number) 
     printf("%d is an Armstrong number.", number); 
    else 
     printf("%d is not an Armstrong number.", number); 

    return 0; 
} 

In diesem Programm wird die number of digits of an integer berechneten ersten und gespeichert in n Variable.

Und die pow() Funktion wird verwendet, um die Leistung einzelner Ziffern in jeder Iteration der while Schleife zu berechnen.

0

Ihr Code hat kein Problem. Es funktioniert gut. Kompilieren Sie Ihren Code gcc -o file filename.c -lm und führen Sie als ./file, um die Verbindungsprobleme zu vermeiden.

0

In meinem Visual Studio 2013 habe ich unten Bild mit Ihrem Code. Sie können verschiedene Compiler-Software versuchen, denke ich.

enter image description here

0

Ihr Algorithmus korrekt ist und Ihr Programm führt wie erwartet (mit Ausnahme der fehlenden Zeilenumbrüche) auf meinem System. Wenn Ihr System 153 als nicht eine Armstrong-Nummer meldet, ist es defekt, möglicherweise wegen der Gleitkommaoperation, um die Ziffern auf die n-te Potenz zu erhöhen. Versuchen Sie diese Alternative:

#include <stdio.h> 
#include <math.h> 

int main() { 
    int no, copy, re, i, d, n = 0, ans = 0; 

    printf("Enter a new number: "); 
    if (scanf("%d", &no) == 1) { 
     copy = no; 
     while (copy != 0) { 
      copy = copy/10; 
      n++; 
     } 
     copy = no; 
     while (copy != 0) { 
      d = copy % 10; 
      for (re = d, i = 1; i < n; i++) { 
       re *= d; 
      } 
      ans = ans + re; 
      copy = copy/10; 
     } 
     if (ans == no) { 
      printf("%d is an Armstrong number\n", no); 
     } else { 
      printf("%d is not an Armstrong number\n", no); 
     } 
     getch(); 
    } 
    return 0; 
}