1034 有理数四则运算 (20分)
有理数四则运算(20)
http://www.nowcoder.com/questionTerminal/c0e43b08b87f4f93bec7ab215e1aa60b
这道题目应该很好理解,关键在于做法。
首先在于数据的取值范围,题目中只说明是整型,但没说多大,我因此有的样例点没有通过。
这道题需要使用long类型的数据格式。
话不多说,直接上代码。
// // main.cpp // 1034 有理数四则运算 (20分) // // Created by Zide Liu on 2020/1/22. // Copyright © 2020 Zide Liu. All rights reserved. // #include <iostream> #include <string> using namespace std; long gcd(long a,long b){//辗转相除法 return b?gcd(b,a%b):a; } /* 可理解为 long gcd(long x,long y){ int z=y; while(x%y){ z=x%y; x=y; y=z; } return z; } */ string print(long a,long b){ long k1=gcd(a,b); a=a/k1;b=b/k1; if(a==0) return "0"; string s; int judge=0; if(b<0){a=-a;b=-b;} if(a<0) {s.append("(-");a=-a;judge=1;} if(a>=b) s.append(to_string(a/b)); if(a>=b&&a%b) s.insert(s.end(),' '); a=a%b; if(a){ s.append(to_string(a)); //s.append("/"); s.insert(s.end(),'/'); s.append(to_string(b)); } if(judge) //s.append(")"); s.insert(s.end(),')'); return s; } int main(){ long a,b,c,d; scanf("%ld/%ld %ld/%ld",&a,&b,&c,&d); cout<<print(a,b)<<" + "<<print(c,d)<<" = "<<print(b*c+a*d,b*d)<<endl; cout<<print(a,b)<<" - "<<print(c,d)<<" = "<<print(a*d-b*c,b*d)<<endl; cout<<print(a,b)<<" * "<<print(c,d)<<" = "<<print(a*c,b*d)<<endl; b*c?cout<<print(a,b)<<" / "<<print(c,d)<<" = "<<print(a*d,b*c)<<endl:cout<<print(a,b)<<" / "<<print(c,d)<<" = Inf"<<endl; return 0; }
相信看完代码你就明白了。
努力学习STL,会有不一样的风景