zoukankan      html  css  js  c++  java
  • 1034 有理数四则运算 (20分)

    注意点,数据类型用long,判断分数小于0不要用a*b<0,要用(a>0&&b<0)||(a<0&&b>0),否则会溢出

    #include<cstdio>
    #include<vector>
    #include<cstring>
    #include<iostream>
    using namespace std;
    long gcd(long a,long b){
        if(b==0)return a;
        return gcd(b,a%b);
    }
    string func(long a, long b){
        string str="";
        bool flag=false;
        if(b==0){
            str=str+"Inf";
            return str;
        }
        if((a<0&&b>0)||(a>0&&b<0)){
            flag=true;
            str+='(';
        }
        if(a==0)
            str+='0';
        else{
            if(flag)str+='-';
            if(a/b*b==a){
                str+=to_string(abs(a/b));
            }
            else{
                int z=a/b;
                a=a-z*b;
                if(z!=0){
                    str+=to_string(abs(z));
                    str+=' ';
                }
                long k=gcd(abs(a),abs(b));
                str+=to_string(abs(a)/k);
                str+='/';
                str+=to_string(abs(b)/k);
            }
        }
        if(flag)str+=')';
        return str;
    }
    int main(){
        long a,b,c,d;
        scanf("%ld/%ld %ld/%ld",&a,&b,&c,&d);
        bool flag1=true,flag2=true;
        string s1=func(a,b);
        string s2=func(c,d);
        char cal[4]={'+','-','*','/'};
        long ans1[4]={0};
        long ans2[4]={0};
        for(int i=0;i<4;i++){
            switch(cal[i]){
                case '+':{
                    ans1[i]=a*d+b*c;
                    ans2[i]=b*d;
                    break;
                }
                case '-':{
                    ans1[i]=a*d-b*c;
                    ans2[i]=b*d;
                    break;
                }
                case '*':{
                    ans1[i]=a*c;
                    ans2[i]=b*d;
                    break;
                }
                case '/':{
                    ans1[i]=a*d;
                    ans2[i]=b*c;
                    break;
                }
                default:break;
            }
            string s=func(ans1[i],ans2[i]);
            cout<<s1;
            printf(" %c ",cal[i]);
            cout<<s2;
            printf(" = ");
            cout<<s<<endl;
        }
        return 0;   
    }
  • 相关阅读:
    解决GitHub下载速度缓慢的问题
    什么是“个人商业模式”?就是一个人出售自己时间的方式
    phpstudy如何安装ssl证书
    心不动——王阳明最可怕之处
    人间立命王阳明
    计算机视觉数据集
    ECG心电图数据2
    ECG心电图数据1
    梯度下降VS随机梯度下降
    SGD
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12659721.html
Copyright © 2011-2022 走看看