南阳理工ACM-OJ 分数加减法 最大公约数的使用

来源:互联网 发布:网络安全工程师专业 编辑:程序博客网 时间:2024/06/05 10:48

http://acm.nyist.net/JudgeOnline/problem.php?pid=111

简单模拟:

#include <iostream>#include <string>#include <cstring>using namespace std;int gcd(int a,int b){if(a<b)return gcd(b,a);if(b==0)return a;return gcd(b,a%b);}int lcm(int a,int b){return a*b/gcd(a,b);}int main(){string s;int fz1,fm1,fz2,fm2;char ch;while(cin>>s){fz1=s[0]-'0';fm1=s[2]-'0';fz2=s[4]-'0';fm2=s[6]-'0';ch=s[3];int fm=lcm(fm1,fm2);fz1=fz1*(fm/fm1);fz2=fz2*(fm/fm2);int fz;if(ch=='+'){fz=fz1+fz2;if(fz%fm==0){cout<<fz/fm<<endl;continue;}// 2/1或者4/2这种情况应该直接输出 int tmp=gcd(fz,fm);fz=fz/tmp;fm=fm/tmp;if(fz==fm)cout<<1<<endl;else cout<<fz<<"/"<<fm<<endl;}else {fz=fz1-fz2;if(fz%fm==0){cout<<fz/fm<<endl;continue;}if(fz==0)cout<<0<<endl;else {int tmp;if(fz<0)tmp=gcd(-fz,fm);else tmp=gcd(fz,fm);fz=fz/tmp;fm=fm/tmp;if(fz==fm)cout<<1<<endl; // 1/1这种情况应该输出1 else    cout<<fz<<"/"<<fm<<endl;}}}return 0;} 


原创粉丝点击