题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2054
这道题很坑但并不复杂
总结:
不需要考虑前导0
不需要考虑正负号,都是无符号数
需要考虑后缀无效0,例如1和1.000,0和0.0
可能是大数比较,不能简单得用浮点类型读入然后用运算符比较,应该当作字符串得比较
#include <cstdio>
#include <cstring>
using namespace std;
char str1[100000+7];
char str2[100000+7];
int main()
{
while(scanf("%s%s", str1, str2) != EOF)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int index1 = 0;
int index2 = 0;
bool flag1 = 0;
bool flag2 = 0;
for(int i=0; i<len1; i++) // 寻找小数点,并记录位置
{
if(str1[i] == '.')
{
flag1 = 1;
break;
}
index1 ++;
}
for(int i=0; i<len2; i++)
{
if(str2[i] == '.')
{
flag2 = 1;
break;
}
index2 ++;
}
if(flag1) // 如果是一个浮点数,则去掉后缀0,如果是1.000这样的还要去掉小数点
{
int i;
for(i=len1-1; str1[i] == '0'; i--)
{
str1[i] = '\0';
}
// printf("%d\n", i);
if(str1[i] == '.')
str1[i] = '\0';
}
if(flag2)
{
int i;
for(i=len2-1; str2[i] == '0'; i--)
{
str2[i] = '\0';
}
if(str2[i] == '.')
str2[i] = '\0';
}
// printf("%s %s\n", str1, str2);
if(strcmp(str1, str2) == 0)
printf("YES\n");
else
{
printf("NO\n");
}
}
return 0;
}