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; }