1034 有理數四則運算

1034 有理數四則運算 (20 分)

本題要求編寫程序,計算 2 個有理數的和、差、積、商。

輸入格式:

輸入在一行中按照 a1/b1 a2/b2 的格式給出兩個分數形式的有理數,其中分子和分母全是整型範圍內的整數,負號只可能出現在分子前,分母不爲 0。

輸出格式:

分別在 4 行中按照 有理數1 運算符 有理數2 = 結果 的格式順序輸出 2 個有理數的和、差、積、商。注意輸出的每個有理數必須是該有理數的最簡形式 k a/b,其中 k 是整數部分,a/b 是最簡分數部分;若爲負數,則須加括號;若除法分母爲 0,則輸出 Inf。題目保證正確的輸出中沒有超過整型範圍的整數。

輸入樣例 1:

2/3 -4/2

輸出樣例 1:

2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)

輸入樣例 2:

5/3 0/6

輸出樣例 2:

1 2/3 + 0 = 1 2/3
1 2/3 - 0 = 1 2/3
1 2/3 * 0 = 0
1 2/3 / 0 = Inf

 

#include<iostream>
#include<string>
using namespace std;
int gongyue(int a, int b)//求最大公約數
{
	if (a < b)
		swap(a, b);
	int c;
	c = a%b;
	while (c != 0)
	{
		a = b;
		b = c;
		c = a%b;
	}
	return b;
}
void out(int a, int b)//輸出格式
{
	if (a == 0)
	{
		cout << 0;
		return;
	}
	if (b == 0)
	{
		cout << "Inf";
		return;
	}
	int flag = 0;//表示正數
	if (double(a) / double(b) < 0)
		flag = 1;
	int c = abs(gongyue(a, b));
	a = abs(a / c);
	b = abs(b / c);
	int k = a/b;
	a = a%b;
	if (flag == 0)//正數
	{
		if (k != 0)
		{
			cout << k;
			if (a == 0)
				return;
			cout << " ";
		}
		cout << a << "/" << b;
	}
	else if (flag == 1)//負數
	{
		cout << "(-";
		if (k != 0)
		{
			cout << k;
			if (a == 0)
			{
				cout << ")";
				return;
			}
			cout << " ";
		}
		cout << a << "/" << b << ")";
	}
}
int main()
{
	int a1, b1, a2, b2;
	scanf("%d/%d", &a1, &b1);
	scanf("%d/%d", &a2, &b2);
	//cout << a1 << b1 << a2 << b2;
	int gongbei = b1*b2 / gongyue(b1, b2);//最小公倍數
	//cout << gongbei<<endl;
	int a3, b3;
	
	//加法
	b3 = gongbei;
	a3 = b3 / b1*a1 + b3 / b2*a2;
	out(a1, b1);
	cout << " + ";
	out(a2, b2);
	cout << " = ";
	out(a3, b3);
	cout << endl;

	//減法
	a3 = b3 / b1*a1 - b3 / b2*a2;
	out(a1, b1);
	cout << " - ";
	out(a2, b2);
	cout << " = ";
	out(a3, b3);
	cout << endl;

	//乘法
	a3 = a1*a2;
	b3 = b1*b2;
	out(a1, b1);
	cout << " * ";
	out(a2, b2);
	cout << " = ";
	out(a3, b3);
	cout << endl;

	//除法
	a3 = a1*b2;
	b3 = a2*b1;
	out(a1, b1);
	cout << " / ";
	out(a2, b2);
	cout << " = ";
	if (b3 == 0)
		cout << "Inf";
	else
		out(a3, b3);
	cout << endl;
	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章