Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
1 2 2 2 3 3 4 3
NO YES YES NO
算是一道比较坑的题,看题目给出的数据根本没什么卵用。想了想坑点可能就是大数的处理。
于是转换成字符串来比较。
先判断是不是浮点数。
然后去掉前导零。
然后根据是不是浮点数去掉后面的零。
代码比较挫,可以根据以上自己动手写一下。
上代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
string a,b;
while(cin >> a >> b)
{
string c,d;
if(a.find('.')!=-1 )
{
int k;
for(k=0; k<a.size(); k++)
{
if(a[k]=='.')break;
}// 找到小数点的位置
int i;
for( i=a.size()-1; i>=k; --i)
{
if(a[i]=='0')continue;
else break;
} 去掉后导零
int j;
for(j=0; j<=a.size()-1;j++)
{
if(a[j]=='0')continue;
else break;
}去掉前导零
if(i==k&&j==k){i--,j++;}
else if(i==k)i--; // 这里去掉无用的小数点
for(int w=j; w<=i; w++)
{
c += a[w];
}
}
else
{
int k;
for(k=0; k<a.size();k++)
{
if(a[k]!='0')break;
}
for(; k<a.size(); k++)
c += a[k];
}
if(b.find('.')!=-1 )
{
int k;
for(k=0; k<b.size(); k++)
{
if(b[k]=='.')break;
}
int i;
for( i=b.size()-1; i>=0; --i)
{
if(b[i]=='0')continue;
else break;
}
//if(i==k)--i;
int j;
for(j=0; j<=b.size()-1;j++)
{
if(b[j]=='0')continue;
else break;
}
//if(j==k)++j;
if(i==k&&j==k){i--;j++;}
else if(i==k) i--;
for(int w=j; w<=i; w++)
{
d += b[w];
}
}
else
{
int k;
for(k=0; k<b.size();k++)
{
if(b[k]!='0')break;
}
for(; k<b.size(); k++)
d += b[k];
}
if(c==d)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
水波。