程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> HDU2054 A==B?

HDU2054 A==B?

編輯:C#入門知識

非常坑的一道題,看上去水到暴。。順手用__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 
            { 
                break; 
            } 
        } 
         
        for(int t=b.length()-1;t>posb;t--) 
        { 
            if(b[t]=='0') 
            { 
                b.erase(t,1); 
            } 
            else 
            { 
                break; 
            } 
        } 
     
     
        //3-防止3.0 --- 3 這種   
        if(a[a.length()-1]=='.') 
            a.erase(a.length()-1,1); 
        if(b[b.length()-1]=='.') 
            b.erase(b.length()-1,1); 
         
         
        //cout<<a<<" "<<b<<endl;  
        if(a==b) 
            cout<<"YES"<<endl; 
        else 
            cout<<"NO"<<endl; 
         
         
         
    } 
     
    return 0; 

#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
   {
    break;
   }
  }
  
  for(int t=b.length()-1;t>posb;t--)
  {
   if(b[t]=='0')
   {
    b.erase(t,1);
   }
   else
   {
    break;
   }
  }
 
 
  //3-防止3.0 --- 3 這種
  if(a[a.length()-1]=='.')
   a.erase(a.length()-1,1);
  if(b[b.length()-1]=='.')
   b.erase(b.length()-1,1);
  
  
  //cout<<a<<" "<<b<<endl;
  if(a==b)
   cout<<"YES"<<endl;
  else
   cout<<"NO"<<endl;
  
  
  
 }
 
 return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved