79 lines
2.2 KiB
C
79 lines
2.2 KiB
C
#include <stdio.h>
|
|
|
|
typedef struct {
|
|
long long int numerator;
|
|
unsigned long long int denominator;
|
|
} FRACTION;
|
|
|
|
FRACTION Fra_Add(FRACTION f1, FRACTION f2);
|
|
FRACTION Fra_Sub(FRACTION f1, FRACTION f2);
|
|
long long findGcd(long long a, long long b);
|
|
FRACTION reduceFrac(FRACTION origin);
|
|
|
|
int main() {
|
|
FRACTION result, toBeAdd;
|
|
int i = 0;
|
|
|
|
result.numerator = 0;
|
|
result.denominator = 1;
|
|
toBeAdd.numerator = 1;
|
|
i = 1;
|
|
while (i < 11) {
|
|
toBeAdd.denominator = 2 * i - 1;
|
|
result = Fra_Add(result, toBeAdd);
|
|
i++;
|
|
toBeAdd.denominator = 2 * i - 1;
|
|
result = Fra_Sub(result, toBeAdd);
|
|
i++;
|
|
}
|
|
result.numerator *= 4;
|
|
result = reduceFrac(result);
|
|
printf("Result: %lld/%lu, or %lf", result.numerator, result.denominator, ((double) result.numerator)/ result.denominator);
|
|
return 0;
|
|
}
|
|
|
|
FRACTION Fra_Add(FRACTION f1, FRACTION f2) {
|
|
FRACTION result;
|
|
if (f1.denominator == 0 || f2.denominator == 0) {
|
|
result.denominator = 0;
|
|
result.numerator = 0;
|
|
return result;
|
|
}
|
|
long long gcd = findGcd((long long)f1.denominator, (long long)f2.denominator);
|
|
result.denominator = (f1.denominator / gcd) * f2.denominator;
|
|
result.numerator = f2.denominator / gcd * f1.numerator + f1.denominator / gcd * f2.numerator;
|
|
return result;
|
|
}
|
|
|
|
FRACTION Fra_Sub(FRACTION f1, FRACTION f2) {
|
|
FRACTION result;
|
|
if (f1.denominator == 0 || f2.denominator == 0) {
|
|
result.denominator = 0;
|
|
result.numerator = 0;
|
|
return result;
|
|
}
|
|
long long gcd = findGcd((long long)f1.denominator, (long long)f2.denominator);
|
|
result.denominator = (f1.denominator / gcd) * f2.denominator;
|
|
result.numerator = f2.denominator / gcd * f1.numerator - f1.denominator / gcd * f2.numerator;
|
|
return result;
|
|
}
|
|
|
|
long long findGcd(long long a, long long b) {
|
|
long long c = a % b;
|
|
switch (c) {
|
|
case 0:
|
|
return b;
|
|
break;
|
|
default:
|
|
return findGcd(b, c);
|
|
}
|
|
}
|
|
|
|
FRACTION reduceFrac(FRACTION origin) {
|
|
long long gcd;
|
|
FRACTION result;
|
|
gcd = findGcd(origin.numerator, origin.denominator);
|
|
result.numerator = origin.numerator / gcd;
|
|
result.denominator = origin.denominator / gcd;
|
|
return result;
|
|
} |