C/C++实现分数四则运算


这种问题主要是化简和规范问题,没有啥技巧性。通过一个结构体数组来表示一个分数:

分数表示

struct Fraction{
	long long up,down;
}

注意事项

需要注意的是下面三个规则:

  • 分子down大于零。若分数为负数,则令分子和分母都取相反数。

  • 若分数为0,这令分子up为0,分母down为1。

  • 分子和分母都没有除了1之外的公约数。

代码实现

写一遍代码熟悉一下:

#include<cstdio>
#include<cmath>
typedef long long ll;
struct Fraction{
	ll up,down;
};
//求最大公约数 
ll gcd(ll a, ll b){
	if(b==0)return a;
	else return gcd(b,a%b);
}
//化简操作
Fraction reduction(Fraction result){
	if(a.down < 0){
		result.up = -result.up;
		result.down = -result.down;
	}
	if(result.up == 0){
		result.down = 1;
	}else{
		ll d = gcd(abs(result.up),abs(result.down));
		result.up /= d;
		result.down /= d;
	}
	return result;
}
 

//加法
Fraction add(Fraction a, Fraction b){
	Fraction result;
	result.up = a.up*b.down + a.down*a.up;
	result.down = a.down * b.down;
	return reduction(result);
}

//减法
Fraction minu(Fraction a, Fraction b){
	Fraction result;
	result.up = a.up*b.down - a.down*b.up;
	result.down = a.down*b.down;
	return reduction(result);
} 

//乘法
Fraction multi(Fraction a , Fraction b){
	Fraction result;
	result.up = a.up*b.up;
	result.down  = a.down*b.down;
	return reduction(result);
}

//除法
Fraction div(Fraction a, Fraction b){
	Fraction result;
	result.up = a.up*b.down;
	result.down = a.down*b.up;
	return reduction(result);
}

//打印
void showResult(Fraction r){
	r = reduction(r);
	if(r.down == 1)printf("%lld",r.up);
	else{
		if(abs(r.up)>abs(r.down)){
			printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);
		}else{
			printf("%d/%d",r.up,r.down);
		}
	}
	
} 

注意到除法的时候可能在输入的时候需要判断除数是否为0。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的分数四则运算C++ 代码,可以进行加、减、乘、除和比较运算: ```c++ #include <iostream> #include <cmath> using namespace std; class Fraction { private: int numerator; // 分子 int denominator; // 分母 public: Fraction(int n, int d) { numerator = n; denominator = d; } void reduce() { int gcd = __gcd(numerator, denominator); numerator /= gcd; denominator /= gcd; } Fraction operator+(const Fraction& other) { int n = numerator * other.denominator + other.numerator * denominator; int d = denominator * other.denominator; Fraction result(n, d); result.reduce(); return result; } Fraction operator-(const Fraction& other) { int n = numerator * other.denominator - other.numerator * denominator; int d = denominator * other.denominator; Fraction result(n, d); result.reduce(); return result; } Fraction operator*(const Fraction& other) { int n = numerator * other.numerator; int d = denominator * other.denominator; Fraction result(n, d); result.reduce(); return result; } Fraction operator/(const Fraction& other) { int n = numerator * other.denominator; int d = denominator * other.numerator; Fraction result(n, d); result.reduce(); return result; } bool operator<(const Fraction& other) { return numerator * other.denominator < other.numerator * denominator; } bool operator>(const Fraction& other) { return numerator * other.denominator > other.numerator * denominator; } void print() { cout << numerator << "/" << denominator << endl; } }; int main() { Fraction a(1, 2); Fraction b(3, 4); Fraction c = a + b; c.print(); c = a - b; c.print(); c = a * b; c.print(); c = a / b; c.print(); cout << (a < b) << endl; cout << (a > b) << endl; return 0; } ``` 注意,这个代码只是一个简单的示例,没有考虑到分数的负数、零、约分等情况。在实际应用中,需要根据具体情况进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值