FCT
载入中...
搜索中...
未找到
Fraction.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/8/11.
3//
4
5#ifndef FRACTION_H
6#define FRACTION_H
7#include <cstdint>
8#include <numeric>
9namespace FCT
10{
11 struct Fraction {
12 int32_t numerator;
13 int32_t denominator;
14
15 Fraction() noexcept : numerator(1), denominator(1) {}
16 Fraction(int32_t num) noexcept : numerator(num), denominator(1) {}
17 Fraction(int32_t num, int32_t den) noexcept : numerator(num), denominator(den) {
18 if (denominator < 0) {
21 }
22 simplify();
23 }
24
25 void simplify() noexcept {
26 if (numerator == 0) {
27 denominator = 1;
28 return;
29 }
30 int32_t gcd = std::gcd(std::abs(numerator), std::abs(denominator));
31 numerator /= gcd;
32 denominator /= gcd;
33 }
34
35 Fraction operator*(const Fraction& other) const noexcept {
36 return Fraction(numerator * other.numerator, denominator * other.denominator);
37 }
38
39 Fraction operator/(const Fraction& other) const noexcept {
40 return Fraction(numerator * other.denominator, denominator * other.numerator);
41 }
42
43 bool operator==(const Fraction& other) const noexcept {
44 return numerator * other.denominator == other.numerator * denominator;
45 }
46
47 bool operator!=(const Fraction& other) const noexcept {
48 return !(*this == other);
49 }
50
51 float toFloat() const noexcept {
52 return static_cast<float>(numerator) / static_cast<float>(denominator);
53 }
54
55 bool isUnit() const noexcept {
56 return numerator == denominator && numerator > 0;
57 }
58 };
59}
60#endif //FRACTION_H
bool operator==(const Fraction &other) const noexcept
void simplify() noexcept
bool isUnit() const noexcept
int32_t denominator
Fraction(int32_t num, int32_t den) noexcept
Fraction(int32_t num) noexcept
float toFloat() const noexcept
Fraction operator/(const Fraction &other) const noexcept
Fraction operator*(const Fraction &other) const noexcept
bool operator!=(const Fraction &other) const noexcept
Fraction() noexcept