修改文件结构。

This commit is contained in:
unlockable
2023-02-21 10:56:54 +08:00
parent a64cfdd9f3
commit 40182871f4
83 changed files with 0 additions and 0 deletions

79
POP/13/Exercise03.c Normal file
View File

@@ -0,0 +1,79 @@
#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;
}