(小坑)A == B ? HDU – 2054
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;}
O(∩_∩)O哈哈哈~
2017年3月30日 下午8:49
哈哈哈,上个网页,莫名的跳转到这里,打个招呼,你好啊
zqqian
2017年4月5日 下午11:00
你也好呀
水鱼
2017年3月31日 下午4:53
第一次看到程序员的日常,好激动