C++运算符重载实现分数的加减法

PTA中遇到了一题分数的加减法,看了网上了一些解法以后想到了运算符重载。
对于分数的加减乘除操作,都可以通过重载运算符来简化计算,且代码较短,可读性较高,重载操作符必须传参类型为‘类’,且必须在类里面申明该重载运算符。
基本框架如下:

class A{
	int numerator;//分子
	int denominator;//分母
	A(int numerator,int denominator);
	A operator+(A rsh);//重载运算符申明
};
A A::operator+(A rsh){
	//pass
	return A;
}

对于分数,可以对分母和分子分别进行运算再将同时处以最大公约数,就可以得到最简分数的结果。

注意点:
1.初始化一个sum时不能将denominator初始化为0,这不符合实际。
2.输出时要考虑numerator=0和denominator=1的情况,不能直接输出。

#include<iostream>
#include<cmath>

class Fraction {
public:
	int fenmu;
	int fenzi;
	void simplify();
	Fraction(int x,int y);
	Fraction operator+(Fraction data);
};

Fraction::Fraction(int x, int y) {
	fenzi = x;
	fenmu = y;
}

void Fraction::simplify() {//化简分数
	int t,x=fenzi,y=fenmu;
	while (y != 0) {//求最大公约数
		t = x % y;
		x = y;
		y = t;
	}
	fenzi /= x;
	fenmu /= x;
}

Fraction Fraction::operator + (Fraction data) {//重载运算符
	Fraction sum(0,1);
	sum.fenzi = fenzi * data.fenmu + fenmu * data.fenzi;
	sum.fenmu = fenmu * data.fenmu;
	sum.simplify();
	return sum;
}

int main() {
	int num;
	Fraction sum(0, 1);
	std::cin >> num;
	for (int i = 0; i < num; i++) {
		char temp;
		int x, y;
		std::cin >> x >> temp >> y;
		Fraction rsh(x, y);
		sum = sum + rsh;
	}
	if (std::abs(sum.fenzi) < std::abs(sum.fenmu)&&sum.fenzi!=0)//分子为0时比任何数都小,所以要排除
		std::cout << sum.fenzi << '/' << sum.fenmu;
	else if (sum.fenzi % sum.fenmu == 0)
		std::cout << sum.fenzi / sum.fenmu;
	else
		std::cout <<sum.fenzi/sum.fenmu<<' ' <<sum.fenzi%sum.fenmu << '/' << sum.fenmu;
}
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值