C
cobretti
Code:
#include <stdio.h>
#include <math.h>
int isAutomorphicNumber (long long int number) //Funktion um zu prüfen ob die Zahl Automorph ist
{
int AiZiffern1[20];
int AiZiffern2[20];
int i = 0;
int j = 0;
int n = 0;
int x = 0;
int z = 0;
long long int itemp = 0;
itemp = number; //Speichern der Zahl in der Hilfsvariable itemp
while (number>=1)
{
AiZiffern1[i] = number%10;
i++;
number = number/10;
}
itemp = itemp*itemp; //Quadrat der Ursprünglichen Zahl wird berechnet
while (itemp>=1) //Einzelne Stellen des Quadrats der Zahl werden in String gespeichert
{
AiZiffern2[j] = itemp%10;
j++;
itemp = itemp/10;
}
for (n=0; n<i; n++) //Strings die das Quadrat und die ursprüngliche Zahl enthalten werden bis zur Stelle i verglichen
if (AiZiffern1[n] != AiZiffern2[n]) //wobei i die Länge der ursprünglichen Zahl ist
x++;
z = (x==0);
return z;
}
int isPandigitalNumber (long long int number) //Funktion zur Ermittlung ob die Zahl Pandigital ist
{
int AiZiffern[20];
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int m = 0;
while (number>=1) //Einzelne Stellen der Zahl werden von hinten nach vorne in String gespeichert
{
AiZiffern[i] = number%10;
i++;
number = number/10;
}
i--;
for (k=0; k<=i; k++) //Zahlen werden vorne nach hinten mit den anderen verglichen, d.h. die 0. Zahl wird mit
{
for (j=0; j<(i-k); j++) //den darauffolgenden verglichen usw.
if (AiZiffern[k] == AiZiffern[k+j+1])
l++; //Falls eine Zahl zweimal vorkommt wird l heraufgestzt
}
if ((l==0) && (i==9))
m = 1;
return m;
}
int isDeficientNumber (long long int number) //Funktion zur Ermittlung ob eine Zahl Defizient ist
{
long long summe = 0;
long long i = 0;
long long iStart = number/2;
for (i=iStart; i > 1; i--) //Schleife ermittelt alle echten Teiler und addiert diese
if (number%i == 0)
summe = summe + i;
if (summe > number)
return 0;
else return 1;
}
int main () {
int b = 1;
long long int a = 0;
do {
printf("\t\t\t bitte geben sie eine zahl ein \n");
scanf ("%lli", &a);
printf ("\n");
printf("Defizient: %i\n\n", isDeficientNumber(a));
printf("Pandigital: %i\n\n", isPandigitalNumber(a));
printf("Automorph: %i\n\n", isAutomorphicNumber(a));
printf ("wollen sie eine weitere zahl ueberpruefen? (1 (ja) oder 0 (nein) eingeben)\n\n\n");
scanf ("%i", &b);
}
while (b==1);
}
Das programm liest eine Zahl ein und prüft dann ob die zahl automorph, pandigital oder defizient ist.
das funktioniert auch soweit gut
mein problem ist jetzt nur wenn ich die zahl 0123456789 oder 012345678 eingeb rechnet das programm alles aus wie gewollt, am ende beendet es sich aber automatisch, so als ob die while schleife am ende mit nein(0) beantwortet worden wäre.
woran liegt das? bei allen anderen zahlen die ich ausprobiert hab funktionierts