1088.Rational Arithmetic
来源:互联网 发布:淘宝花溪是卖的正品吗 编辑:程序博客网 时间:2024/05/23 07:24
【题意】
对两个分数进行四则运算,并用最简形式表示结果
【思路】
通过求最大公约数约分,别的就没啥好说的了
#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <sstream>#include <cmath>using namespace std;#define ll long longll gcd(ll a, ll b){if(a<b){return gcd(b,a);}else if(a%b==0){return b;}else{return gcd(b,a%b);}}string ll2str(ll num){string res = "";while(num){res.insert(res.begin(),num%10+'0');num /= 10;}return res;}string simplestForm(ll numerator, ll denominator){if(denominator==0){return "Inf";}else if(numerator==0){return "0";}else{string res = "";bool nf = false;if((numerator<0 && denominator>0) || (numerator>0 && denominator<0)){nf = true;res.append("(-");}numerator = abs(numerator);denominator = abs(denominator);ll tmp = gcd(numerator,denominator);numerator /= tmp;denominator /= tmp;if(numerator/denominator){ll tmp = numerator/denominator;numerator %= denominator;res.append(ll2str(tmp));if(numerator==0){if(nf){res.insert(res.end(),')');}return res;}else{res.append(" ");}}res.append(ll2str(numerator)+"/"+ll2str(denominator));if(nf){res.insert(res.end(),')');}return res;}}int main(int argc, char const *argv[]){ll numerator[3],denominator[3];for(int i=0; i<2; i++){scanf("%lld/%lld", &numerator[i], &denominator[i]);}string newForm[3];for(int i=0; i<2; i++){newForm[i] = simplestForm(numerator[i], denominator[i]);}cout << newForm[0] << " + " << newForm[1] << " = ";numerator[2] = numerator[0]*denominator[1]+numerator[1]*denominator[0];denominator[2] = denominator[0]*denominator[1];newForm[2] = simplestForm(numerator[2], denominator[2]);cout << newForm[2] << endl;cout << newForm[0] << " - " << newForm[1] << " = ";numerator[2] = numerator[0]*denominator[1]-numerator[1]*denominator[0];denominator[2] = denominator[0]*denominator[1];newForm[2] = simplestForm(numerator[2], denominator[2]);cout << newForm[2] << endl;cout << newForm[0] << " * " << newForm[1] << " = ";numerator[2] = numerator[0]*numerator[1];denominator[2] = denominator[0]*denominator[1];newForm[2] = simplestForm(numerator[2], denominator[2]);cout << newForm[2] << endl;cout << newForm[0] << " / " << newForm[1] << " = ";numerator[2] = numerator[0]*denominator[1];denominator[2] = denominator[0]*numerator[1];newForm[2] = simplestForm(numerator[2], denominator[2]);cout << newForm[2];system("pause");return 0;}
0 0
- 1088. Rational Arithmetic (20)
- PAT 1088. Rational Arithmetic
- 1088. Rational Arithmetic (20)
- 1088.Rational Arithmetic
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- easyui 让$.messager.show()组建也显示自定义的前缀图标
- HDOJ——简单题(1002,1004)
- 设置tomcat启动内存及查看某进程目前正在使用内存
- JavaScript学习(二)
- java.lang.OutOfMemoryError: Unable to create new native thread
- 1088.Rational Arithmetic
- 天梯 蛇形矩阵
- 三言两语教你理解 Latent Dirichlet Allocation Model
- java axis2 webservice 接口的开发搭建和demo
- genymotion localhost
- iOS关于打包的那些事
- 【iOS开发-113】在storyboard上用AutoLayout,纯代码实现AutoLayout布局方法以及简单动画
- c++中new的几种用法详解
- 关于String类和StringBuffer类的区别