• 【HDOJ】 P2054 A == B ?


    题目意思不太多解释,具体WA的情况可以举出一下特例

    0 +0

    0.00 0

    +1 -2

    +1.00 -1.00

    +.2 -.2

    .0 .1

    等等

    不过可以发现对上面的数据处理,可以分为以下几步

    1、找到小数点,并且以小数点为中间进行分割

    2、对于小数点前的部分,首先判断正负,其次是去除前导0,如果全是0则全去除

    对于小数点后的部分仅仅去除后面多余的0即可,如果全部为0则全去除

    3、进行整合,并判断除了符号以外的数值是否相等,然后再判断正0和负0的问题

    以上问题经过这几步就成功解决

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define mn 100001
    using namespace std;
    
    char a[mn],b[mn];
    bool flag;
    
    void solve(char *a){
        int n=strlen(a);
        int k=0,s,t;
        while(a[k]!='.' && k<n) k++;
        if (a[0]!='-') a[-1]='+';
        else a[-1]='-';
        for (s=0;s<k;s++) if(a[s]!='+' && a[s]!='-' && a[s]!='0') break;
        for (t=n-1;t>k;t--) if (a[t]!='0') break;
        if (t<k) t=k;
        for (int i=s;i<k;i++) a[i-s]=a[i];
        a[k-s]='.';
        for (int i=k+1;i<=t;i++) a[i-s+1]=a[i];
        a[t-s+1]='';
    }
    
    int main(){
        while(scanf("%s%s",a+1,b+1)!=EOF){
            flag=true;
            solve(a+1);
            solve(b+1);
            //cout<<a<<" "<<b<<endl;
            for (int i=1;a[i]!='';i++) if (a[i]!=b[i]){
                flag=false;
                break;
            }
            if (a[1]!='.' || a[2]!='')
                if (a[0]!=b[0]) flag==false;
            if (flag) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    实例 find
    实例 历史命令查找
    Crontab
    find命令
    实例 tar备份以日期命名
    断开网络驱动器后图标不消失
    Windows7系统下优化固态硬盘
    目标进程已退出,但未引发 CoreCLR 启动事件
    md5 helper
    List<T> or IList<T>
  • 原文地址:https://www.cnblogs.com/XGHeaven/p/4002330.html
Copyright © 2020-2023  润新知