HD 2054 a==b? (数据比较坑,附上一些数据~)

                                            A == B ?

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 102128    Accepted Submission(s): 16260


Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
 

Input
each test case contains two numbers A and B.
 

Output
for each case, if A is equal to B, you should print "YES", or print "NO".

Sample Input
  
  
1 2 2 2 3 3 4 3
 

Sample Output
  
  
NO YES YES NO
 

Author
8600 && xhd
 

Source
 

一些数据:
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
YES

00000000000000000002222 2222
YES
 
200 200000
NO 

0.00002 0.000020000000000000000000000000000000
YES

00000000000000000000.00002 0.0000200000
YES

0022000 0000000000022000
YES

-0022.00200 -000000000000022.002000000000000000000
YES

+0.00 0.000000000000000
YES

000000000 0000000000000
YES

000001.00000 1
YES

-0001.000 0001
NO

-0 0
YES


ac代码:

// author: Feynman1999
#include<iostream>
#include<cstring>
using namespace std;

char a1[100010];
char a2[100010];

int fun2(char *a,int len){
	int flag=0;
	for(int i=0;i<len;++i)
	if(a[i]=='0'||a[i]=='.') flag++;
	if(flag==len) return 1;
	else return 0;
}

int index(char *a,int len)//判断是否为小数 
{
	for(int i=0;i<len;++i)
	 if(a[i]=='.') return 1;
	 
	return 0;
}

char fun(char *a,int & len)//符号问题 
{
	if(a[0]=='-'){
		for(int i=1;i<len;++i){
			a[i-1]=a[i];
		}
		len--;
		if(fun2(a,len)==1) return'+'; 
		else return '-';
	}
	else if(a[0]=='+'){
		for(int i=1;i<len;++i){
			a[i-1]=a[i];
		}
		len--;
		return '+';
	}
	return '+';
}

void front_0(char *a,int & len)//处理前导零 
{
	int t=0;
	int temp;
	temp=len;
	while(a[t]=='0'&&a[t+1]!='.'&&len>0)
	{
		t++;
		len--;
	}
	int j=0;
	for(int i=t;i<temp;++i,++j){
		a[j]=a[i];
	}
	a[j]='\0';
} 

void back_0(char *a,int & len)//处理后续零 
{ 
	int t=len-1;
	while(a[t]=='0')
	{
		t--;
		len--;
	}
	a[t+1]='\0';
}

int main()
{
	int index1,index2;
	index1=index2=0;
	int len1,len2;
	char c1,c2;
	while(cin>>a1>>a2)
	{
		len1=strlen(a1);
		len2=strlen(a2);
		index1=index(a1,len1);
		index2=index(a2,len2);
		c1=fun(a1,len1);
		c2=fun(a2,len2);
		if(index1!=index2) 
		{
			if(fun2(a1,len1)==1&&fun2(a2,len2)==1) cout<<"YES"<<endl;
			else{
				front_0(a1,len1);
				front_0(a2,len2);
				back_0(a1,len1);
				back_0(a2,len2);
				int len3;
				len3=len1<len2?len1:len2;
				if(strncmp(a1,a2,len3)==0&&c1==c2) cout<<"YES"<<endl;
				else cout<<"NO"<<endl;
			}
		}
		else if(index1==0){
			front_0(a1,len1);
			front_0(a2,len2);
			if(strcmp(a1,a2)==0&&c1==c2) cout<<"YES"<<endl;
			else cout<<"NO"<<endl;
		}
		else if(index1==1){
			front_0(a1,len1);
			front_0(a2,len2);
			back_0(a1,len1);
			back_0(a2,len2);
			if(strcmp(a1,a2)==0&&c1==c2) cout<<"YES"<<endl;
			else cout<<"NO"<<endl;
		}
	}
	return 0;
}

 
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值