当前位置:编程学习 > C#/ASP.NET >>

HDU2054 A==B?

非常坑的一道题,看上去水到暴。。顺手用__int64,wa了,然后才发现没这么简单。

1、统一正负号

2、去掉先导零

3、去掉小数点后末尾的0

3、各种用0表示的坑 +0 -0 +0.00 -0.000都是yes...

不要小看水题。。ORZ


[cpp]
#include <iostream>  
#include <string>  
#include <cstdio>  
#include <ctype.h>  
using namespace std; 
 
int main() 

    string a,b; 
    string blank=""; 
    while(cin>>a>>b) 
    { 
        bool a0=1,b0=1; 
        //0单独判断之,防止0.00 -0 +0.000 +00.000.......等很多种   
        for(int i=0;i<a.length();i++) 
        { 
            if(a[i]!='0' && a[i]!='.' && a[i]!='+' && a[i]!='-') 
            { 
                a0=0; 
                break; 
            } 
                 
        }  
        for(int i=0;i<b.length();i++) 
        { 
            if(b[i]!='0'&&b[i]!='.'&&b[i]!='+'&&b[i]!='-') 
            { 
                b0=0; 
                break; 
            } 
             
        } 
        if(a0==1 && b0==1) 
        { 
            cout<<"YES"<<endl; 
            break; 
        } 
        //1-防止+0 0这种   
        if(isdigit(a[0])) 
            a.insert(0,"+"); 
        if(isdigit(b[0])) 
            b.insert(0,"+"); 
             
        int posa=a.length()-1; 
        int posb=b.length()-1; 
        int befzeroa=0,befzerob=0; 
         
         
        for(int j=1;j<posa;j++) 
        { 
            if(a[j]=='0') 
                continue; 
            else 
            { 
                befzeroa=j-1; 
                break; 
            } 
                 
        } 
        for(int j=1;j<posb;j++) 
        { 
            if(b[j]=='0') 
                continue; 
            else 
            { 
                befzerob=j-1; 
                break; 
            } 
             
        } 
        //2-防止009.7  9.7这种   
        a.erase(1,befzeroa); //正确的删除用法   
        b.erase(1,befzerob); 
     
        int lastzeroa=a.length(); 
        int lastzerob=b.length(); 
         
        for(int i=1;i<a.length();i++) 
        { 
            if(a[i]=='.') 
                posa=i; 
        } 
        for(int j=1;j<b.length();j++) 
        { 
            if(b[j]=='.') 
                posb=j; 
        } 
         
        for(int p=a.length()-1;p>posa;p--) 
        { 
            if(a[p]=='0') 
            { 
                a.erase(p,1); 
            } 
            else 
            { 

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,