(小坑)A == B ? HDU – 2054

作者: qwq 分类: ACM 发布时间: 2017-03-29 19:47

Give you two numbers A and B, if A is equal to B, you should print “YES”, or print “NO”.Inputeach test case contains two numbers A and B.
Outputfor 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

这道题最坑的地方在于没有给数据范围。

所以测试点数字的长度可能特别长。

而且不一定是整数。

而且前面可能含有若干个0 比如00000123和123.

小数后面也可能含有若干个0,比如1.23和1.230000000

我的策略是用字符串读入两个数字。

把数字分为小数点前的那一部分和小数点后的部分。

小数点前的部分从后往前比较。

小数点后的部分从前往后比较。

如果有一位不相等,就输出no

比较完之后剩余的数字如果全是0,就判断相等。

输出yes

应该还有更好的算法。。。

#include<iostream>
using namespace std;
int main(){
	string a,b;
	bool yes;
	bool pointa,pointb;
	while(cin>>a>>b){
		int la=a.length(),lb=b.length();
		pointa=false;
		pointb=false;
		int i=a.length(),j=b.length();
		for(int l=0;l<a.length();l++){
			if(a[l]=='.'){
			i=l;
			la=l;
			pointa=true;
			}
		}
		for(int l=0;l<b.length();l++){
			if(b[l]=='.'){
			j=l;
			lb=l;
			pointb=true;
			}
		}
		yes=false;
		
	while(i>0&&j>0){
		if(a[--i]!=b[--j]){
			yes=true;
		}
	}

	 
 if(i>0){
		for(int m=0;m<i;m++){
			if(a[m]!='0'){
				yes=true;
			}
		}
		
	}else if(j>0){
		for(int m=0;m<j;m++){
			if(b[m]!='0'){
				yes=true;
			}
		}
	}
	
while(la<a.length()-1&&lb<b.length()-1){
		if(a[++la]!=b[++lb]){
			yes=true;
		}
	}
	while(la<a.length()-1){
		if(a[++la]!='0')
		yes=true;
	}
		while(lb<b.length()-1){
		if(b[++lb]!='0')
		yes=true;
	}
	
	
		if(yes)
	cout<<"NO"<<endl;
	else
	cout<<"YES"<<endl;
} 
return 0;}

 

 

3条评论
  • O(∩_∩)O哈哈哈~

    2017年3月30日 下午8:49

    哈哈哈,上个网页,莫名的跳转到这里,打个招呼,你好啊

    1. zqqian

      2017年4月5日 下午11:00

      你也好呀

  • 水鱼

    2017年3月31日 下午4:53

    第一次看到程序员的日常,好激动

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注