https://www.nowcoder.com/pat/2/problem/261 分数运算 1012
思路:
分子与分母互质,只需求出两数最大公约数,并同时约去公约数即可。
&& 利用了最大公约数的思想
函数原型:
int gys(int x,int y)
{
if(y%x==0) return x;
return gys(y%x,x);
}!!注意分子与分母是否异号
#include<cstdio>
#include<cmath>
#include <cstdlib>
using namespace std;
int gys(int x, int y)
{
if(y % x == 0)
return x;
return gys(y % x, x);
}
int main(){
int a, b, m, n;
char c;
while(scanf("%d/%d %d/%d %c",&a,&b,&m,&n,&c)!=EOF)
{
int x, y;
//printf("%d/%d %d/%d %c",a,b,m,n,c);
if(b == 0 || m == 0)
return 0;
else{
switch(c)
{
case '+':
{
x = a * n + b * m;
y = b * n;
break;
}
case '-':
{
x = a * n - b * m;
y = b * n;
break;
}
case '*':
{
x = a * m;
y = b * n;
break;
}
case '/':
{
x = a * n;
y = b * m;
break;
}
}
if(x == 0)
printf("0");
else
{
int t = gys(x, y);
//printf("%d\n", t);
if(x * y > 0)
printf("%d/%d\n",x/t, y/t);
if(x * y < 0)
printf("-%d/%d\n",abs(x/t), abs(y/t));
}
}
}
return 0;
}

京公网安备 11010502036488号