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

分数四则运算

      • 分数表示
      • 注意事项
      • 代码实现

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

分数表示

struct Fraction{
	long long up,down;
}

注意事项

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

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

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

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

代码实现

写一遍代码熟悉一下:

#include
#include
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。

你可能感兴趣的:(程序设计)