1034. 有理数四则运算(20)
来源:互联网 发布:17年淘宝生意越来越差 编辑:程序博客网 时间:2024/05/19 03:23
1034. 有理数四则运算(20)
本题要求编写程序,计算2个有理数的和、差、积、商。
输入格式:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。
输出格式:
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中没有超过整型范围的整数。
输入样例1:
2/3 -4/2
输出样例1:
2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)
输入样例2:
5/3 0/6
输出样例2:
1 2/3 + 0 = 1 2/3
1 2/3 - 0 = 1 2/3
1 2/3 * 0 = 0
1 2/3 / 0 = Inf
#include<iostream>#include<fstream>#include<string>#include<math.h>#include<sstream>using namespace std;int str2int(string s){ int pos=s.find_first_of("-",0); int num=0,mut=1; for(int i=s.size();i!=0;i--) { num+=(s[i-1]-'0')*mut; mut*=10; } if(pos==s.npos) return num; else return -num;}//由字符串提取整型int maxY(int n1,int n2){ int max=n1>n2?n1:n2; int min=n1<n2?n1:n2; if(min==0) return max; else { if(max%min==0) return min; else maxY(min,max%min); }}//求取两整数的最大公约数string int2str(int n){ stringstream ss; ss<<n; return ss.str();}//将整型转化为字符串string getTrue(int n1,int n2){ int y=maxY(abs(n1),n2); string result; n1=n1/y; n2=n2/y; if(n2==1) result=int2str(n1); else if(abs(n1)>n2) { if(n1<0) { int i=abs(n1)/n2; result=int2str(-i)+" "+int2str(abs(n1)%n2)+"/"+int2str(n2); }else { int i=n1/n2; n1=n1%n2; result=int2str(i)+" "+int2str(n1)+"/"+int2str(n2); } } else result=int2str(n1)+"/"+int2str(n2); if (n1<0) return ("("+result+")"); else return result;}//获得真分数形式string calculate(int *s,char flag){ string result; switch (flag) { case '*': result=getTrue(s[0]*s[2],s[1]*s[3]); break; case '/': if(s[2]==0) { result="Inf"; break; } else if(s[2]<0) { result=getTrue(-s[0]*s[3],-s[1]*s[2]); break; } else { result=getTrue(s[0]*s[3],s[1]*s[2]); break; } case '+': result=getTrue(s[0]*s[3]+s[1]*s[2],s[1]*s[3]); break; case '-': result=getTrue(s[0]*s[3]-s[1]*s[2],s[1]*s[3]); break; } return result;}//四则运算int main(){ fstream file("data.txt"); string line; int s[4]; getline(file,line); int start=0; int end=line.find_first_of("//",start); s[0]=str2int(line.substr(start,end)); start=end+1; end=line.find_first_of(" ",start); s[1]=str2int(line.substr(start,end-start)); start=end+1; end=line.find_first_of("//",start); s[2]=str2int(line.substr(start,end-start)); s[3]=str2int(line.substr(end+1,line.size()-end-1));//从txt文件中读取输入 string s1=getTrue(s[0],s[1]); string s2=getTrue(s[2],s[3]); cout<<s1<<" + "<<s2<<" = "<<calculate(s,'+')<<endl; cout<<s1<<" - "<<s2<<" = "<<calculate(s,'-')<<endl; cout<<s1<<" * "<<s2<<" = "<<calculate(s,'*')<<endl; cout<<s1<<" / "<<s2<<" = "<<calculate(s,'/')<<endl; return 0;}
0 0
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 《Android源码设计模式解析与实战》读书笔记(五)
- ASCII值对照表
- 自定义View---自定义Title InvalidInt:res/drawable xxhdpi-v4/arrow_back.png
- How to learn DL
- MySQL数据库主从同步总结
- 1034. 有理数四则运算(20)
- [Docker] How to setup private registry
- sharedPreferences 的使用
- [FIDO]U2FHID协议
- 黑盒测试笔记
- 网关、子网掩码、DNS各有什么作用
- UIImageView
- Android之异步任务AsyncTask解析XML数据
- iOS ---清除缓存