The following code runs fine for denom <= 11, but it gives a segmentation fault with the gcc compiler and doesn't run at all with other compilers for denom > 11. Please help! Thanks.
Code:
#include <stdio.h>
void arrage(long *a, long *b);
void reduce(long *numer, long *denom, long gcd);
int getGCD(long a, long b);
int getLCD(long a, long b);
main()
{
long denom, lcd, sumNumer = 1, sumDenom = 1;
for(denom = 2; denom <= 11; denom++) {
lcd = getLCD(sumDenom, denom);
sumNumer = sumNumer * lcd / sumDenom + lcd / denom;
sumDenom = lcd;
reduce(&sumNumer, &sumDenom, getGCD(sumDenom, sumNumer));
}
printf("Sum is: %d/%d or %.5f in decimal form.\n",
sumNumer, sumDenom, (double)sumNumer / sumDenom);
getchar();
}
void arrage(long *a, long *b)
{
int temp;
if(*b > *a) {
temp = *a;
*a = *b;
*b = temp;
}
}
void reduce(long *numer, long *denom, long gcd)
{
*numer = *numer / gcd;
*denom = *denom / gcd;
}
int getGCD(long a, long b)
{
int r;
arrage(&a, &b);
r = a % b;
if(r == 0)
return b;
else
return getGCD(b, r);
}
int getLCD(long a, long b)
{
return a * b / getGCD(a, b);
}