2016-09-20 4 views
1

In diesem Programm bekomme ich am Ende eine Gleitkommaausnahme. Es gibt zwei Hauptdateien, mit denen ich arbeite. Die erste ist die "main" unten aufgeführt:Ich bin mir nicht sicher, wo ich falsch liege. Ein Programm schreiben, um die Primfaktorzerlegung in c auszudrucken und zusammen damit zu üben

int main(){ 
int ans; 
do{ 
printf("Enter an integer greater than 1:\n"); 
scanf("%d", &ans); 
}while(ans <= 1); 

printf("%d = ", ans); 

int d = 2; 

while(ans >= d){ 

if(ans == d){ 
     printf("%d^%d", d, factor_power(ans, d)); 
     ans = ans/(d^(factor_power(ans, d))); 
} 

else{ 
     printf("%d^%d * ", d , factor_power(ans , d)); 
     ans = ans/(d^(factor_power(ans, d))); 
     d++; 

     } 
} 

printf("\n"); 

return 0; 
} 

Die Datei, die die factor_power() -Methode enthält, ist hier:

int factor_power(int n, int d){ 
int p = 1; 

do{ 
if(n % (d^p) == 0) 
     p ++; 
}while(n % (d^(p+1)) == 0); 

return p; 
} 

beide sind meine Header math.h und stdio.h. Ich bin einfach so verloren, wo die Gleitkommaausnahme herkommt. Das Programm soll wie die Primfaktoren drucken:

1200 = 2^4 * 3^1 * 5 * 2.

Amy Feedback wird sehr geschätzt.

+0

'^' ist XOR in C. – BLUEPIXY

+0

oh wow in Ordnung, wie Sie einen int-Wert von etwas bekommen zu einer Leistung von etwas anderes in C zu nehmen? Tut mir leid, wenn das dumm ist, ich fange gerade an zu lernen C – Dakota

+1

ZB int ipower (intx, intn) {/ * x^n */ \t int ergebnis = 1; \t while (n> 0) { \t \t if (n & 1) \t \t \t Ergebnis * = x; \t \t x = x * x; \t \t n >> = 1; \t} \t Ergebnis zurückgeben; } ' – BLUEPIXY

Antwort

2

Versuchen folgende:

int ipow(int base, int exp) 
{ 
int power = 1; 
while (exp) 
{ 
    if (exp & 1) 
     power *= base; 
    exp >>= 1; 
    base *= base; 
    } 

return power; 
} 


int factor_power(int n, int d){ 
int p = 1; 

do{ 
if((n % ipow(d,p)) == 0) 
    p++; 
} while((n % ipow(d,(p+1))) == 0); 

    return p; 
    } 

Sie müssen möglicherweise "math.h" enthalten, wenn u bereits nicht hatte.

Hoffe es hilft!

+1

könnte auch sinnvoll sein zu überprüfen 'exp' ist nicht negativ –

+0

@ M.M Keine Notwendigkeit, da p (exp) mit 1 initialisiert und bei jeder Iteration um 1 erhöht wird. –

Verwandte Themen