zoukankan      html  css  js  c++  java
  • 洛谷——P1572 计算分数

    P1572 计算分数

    模拟+字符串

    注意有两位数的情况以及负数情况

    #include<bits/stdc++.h>
    
    using namespace std;
    
    string s;
    int a[1006],b[1006],tot,kp[1006];
    
    int gcd(int x,int y) {
        return !y?x:gcd(y,x%y);
    }
    
    int main() {
        cin>>s;
        int k=0;
        ++tot;
        while(1) {
            if(s[k]=='/') break;
            if(k==s.length()) break;
            a[tot]=a[tot]*10+s[k]-'0';
            k++;
        }
        for(int i=0; i<s.length(); i++) {
            if(s[i]=='/') {
                int k=i+1;
                while(1) {
                    if(s[k]=='+'||s[k]=='-') break;
                    if(k==s.length()) break;
                    b[tot]=b[tot]*10+s[k]-'0';
                    k++;
                }
            }
            if(s[i]=='+') kp[tot]=1;
            if(s[i]=='-') kp[tot]=0;
            if(s[i]=='+'||s[i]=='-') {
                ++tot;
                int k=i+1;
                while(1) {
                    if(s[k]=='/') break;
                    if(k==s.length()) break;
                    a[tot]=a[tot]*10+s[k]-'0';
                    k++;
                }
            }
        }
        b[0]=1;
        for(int i=1; i<=tot; i++)
            b[0]=(b[0]*b[i])/gcd(b[0],b[i]);
        kp[0]=1;
        for(int i=1; i<=tot; i++) {
            a[0]=a[0]+(!kp[i-1]?-1:1)*(a[i]*b[0])/b[i];
        }
        int x=b[0]/gcd(a[0],b[0]),y=a[0]/gcd(a[0],b[0]);
        if(x==1) printf("%d
    ",y);
        else if(x==-1) printf("-%d
    ",y<0?-y:y);
        else if(x<0) printf("%d/%d
    ",-y,-x);
        else printf("%d/%d
    ",a[0]/gcd(a[0],b[0]),b[0]/gcd(a[0],b[0]));
        return 0;
    }
  • 相关阅读:
    iOS 实现多个按钮,点选一个其它都取消选中状态的最佳方法
    iOS隐藏导航条1px的底部横线
    ios url 编码和解码
    ClassLoader
    Java多线程
    Tomcat8-启动脚本分析
    Cmd
    java命令
    Http报文
    断点续传原理
  • 原文地址:https://www.cnblogs.com/song-/p/9623312.html
Copyright © 2011-2022 走看看