题目编号 |
8 |
时间限制 |
1000 毫秒 |
内存限制 |
32768 K字节 |
问题描述
实现分数的加减乘除运算。
输入
输入包含多行,每行第一个字符是一个运算符+、-、*或者/。然后是第一个分数的分子和分母,然后是第二个分数的分子和坟分母。他们之间用一个空格隔开。分数的分子和分母都是整数。
输出
对应于每行输入,输出一行,包含两个整数,分别是输入的两个分数经过指定的计算后的分数的分子和分母。结果要约到最简。若结果为负数,则分子为负分母为正;若结果为正,则分子分母都是正的。如果分母是1或者分子是0,则只输出分子部分,分母部分省略。
输入样例
+ 1 2 1 3
- 1 2 1 3
* 1 2 1 3
输出样例
5 6
1 6
1 6
#include <cstdlib>
#include <iostream>
using namespace std;
struct faction{
int cris;
int nume;
};
int disvisor(int m,int n){
int r = 0;
while(n != 0){
r = m % n;
m = n;
n = r % n;
}
return m;
}
struct faction operate(char ch,struct faction num1,struct faction num2){
struct faction num;
switch(ch){
case'+':
num.cris = num1.cris * num2.nume + num1.nume * num2.cris;
num.nume = num1.nume * num2.nume;
break;
case'-':
num.cris = num1.cris * num2.nume - num1.nume * num2.cris;
num.nume = num1.nume * num2.nume;
break;
case'*':
num.cris = num1.cris * num2.cris;
num.nume = num1.nume * num2.nume;
break;
case'/':
num.cris = num1.cris * num2.nume;
num.nume = num1.nume * num2.cris;
break;
}
return num;
}
int main(int argc, char *argv[])
{
char oper;
struct faction num1,num2,num3;
int dis;
while(cin >> oper >> num1.cris >> num1.nume >>num2.cris >>num2.nume){
num3 = operate(oper,num1,num2);
dis = disvisor(num3.cris,num3.nume);
num3.cris /= dis;
num3.nume /= dis;
if(num3.nume < 0){
num3.nume *= -1;
num3.cris *= -1;
}
if(num3.cris == 0 ||num3.nume ==1)
cout << num3.cris << endl;
else
cout << num3.cris <<" "<<num3.nume <<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}