【C++】实现一个有理数类
有理数:指所有可以用两个整数的商来表示的数
Rational.h
Rational类的接口
#ifndef _RATIONAL_H
#define _RATIONAL_H
#include <iostream>
#include <string>
class Rational {
public:
Rational();
Rational(int n);
Rational(int x, int y);
std::string toString();
friend Rational operator+(Rational r1, Rational r2);
friend Rational operator-(Rational r1, Rational r2);
friend Rational operator*(Rational r1, Rational r2);
friend Rational operator/(Rational r1, Rational r2);
private:
int num; // 分子
int den; // 分母
};
std::ostream &operator<<(std::ostream & os, Rational rat);
Rational operator+(Rational r1, Rational r2);
Rational operator-(Rational r1, Rational r2);
Rational operator*(Rational r1, Rational r2);
Rational operator/(Rational r1, Rational r2);
#endif //LEETCODE_RATIONAL_H
Rational.cpp
Rational类的实现
//
// Created by NFYD on 10/6/2022.
//
#include "rational.h"
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int gcd(int x, int y);
Rational::Rational() {
num = 0;
den = 1;
}
Rational::Rational(int n) {
num = n;
den = 1;
}
Rational::Rational(int x, int y) {
if (y == 0) printf("Rational: Division by zero!");
if (x == 0) {
num = 0;
den = 1;
} else {
int g = gcd(abs(x), abs(y));
num = x / g;
den = abs(y) / g;
if (y < 0) num = -num;
}
}
string Rational::toString() {
if (den == 1) {
return integerToString(num);
} else {
return integerTostring(num) + "/" + integrToString(den);
}
}
ostream & operator<<(ostream & os, Rational rat) {
return os << rat.toString();
}
Rational operator+(Rational r1, Rational r2) {
return Rational(r1.num * r2.den + r2.num * r1.den, r1 .den * r2.den);
}
Rational operator-(Rational r1, Rational r2) {
return Rational(r1.num * r2.den - r2.num * r1.den, r1 .den * r2.den);
}
Rational operator*(Rational r1, Rational r2) {
return Rational(r1.num * r2.num, r1.den * r2.den);
}
Rational operator/(Rational r1, Rational r2) {
return Rational(r1.num * r2.den, r1.den * r2.num);
}
int gcd(int x, int y) {
int r = x % y;
while (r != 0) {
x = y;
y = r;
r = x % y;
}
return y;
}
/* gcd也可以写成这种
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
*/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析