东华大学 2022 oj c++ 无超纲写法 A==B? (巨坑!!!)
oj c++ 无超纲写法 A==B? (巨坑!!!)
·
//睡觉前想着好歹自己写一道题目就睡,然后一看题目,想着好简单,才发现坑巨多
//原本想着再论坛上找一个字符串转数字的函数,先是没找到合适的,后来一想,1000位,肯定会爆,就放弃了这个想法
//后来又注意到了题干中说首末会出现0,于是我想着分三种情况,即都有小数点,一个有一个无,都没有,然后分别去解,但又觉得太麻烦了
//最终的想法是看到了另一位博主的一句话“如果末位0删到了小数点,那么就把小数点也删了”,于是,我就想,我们可以对这个字符串做手术
//手术目的是使整个字符串不存在在“数字大小意义上多余的字符”(即.00直接去除,因为不影响大小),这是我最终思路的关键
//手术顺序:1.去除首“0”(听着好奇怪),这没啥好说的,无论有无小数点,首“0”都是无意义的
2.判断有无小数点,如果有,去除尾“0”
3.最后再判断最后一项是否是小数点,如果是,去除
//最后利用strcmp比较即可
//注:就算是00000和00.00,删到最后没有了,是会判相等的
AC代码:
#include<iostream>
#include<string>
#include<bits/stdc++.h>
using namespace std;
int existpoint(char a[])
{
for (int i = 0; a[i] != '\0'; i++)
{
if (a[i] == '.')return 1;
}
return 0;
}
void removef(char a[])//a为给定数组,n为初始有效元素个数
{
int n = strlen(a);
for (int i = 0; i < n - 1; i++)
{
a[i] = a[i + 1];
}
a[n - 1] = '\0';
}//做一个删除字符串首项的函数
void removel(char a[])
{
int n = strlen(a);
a[n - 1] = '\0';
}//做一个删除字符串最后一项的函数
void trans(char a[])
{
while (a[0] == '0')
{
removef(a);
}
int len = strlen(a);
if (existpoint(a)==1)//先判有无小数点,有的话删末位0
{
while (a[len - 1] == '0')
{
removel(a); len--;
}
}
if (a[len - 1] == '.')
{
removel(a); len--;
}
}
int main()
{
int n=0;
cin >> n; getchar();
char a[1010];
char b[1010];
while (cin.getline(a,1010,' '),cin.getline(b,1010),n--)
{
trans(a);
trans(b);
/*for (int i = 0; a[i] != '\0'; i++)
{
cout << a[i];
}cout << endl;
for (int i = 0; b[i] != '\0'; i++)
{
cout << b[i];
}*/
if (strcmp(a, b) == 0)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
//system("pause");
return 0;
}
更多推荐
已为社区贡献7条内容
所有评论(0)