HDU2054 A == B ?

HDU2054 A == B ?

题目:
Give you two numbers A and B, if A is equal to B, you should print “YES”, or print “NO”.
Input
each test case contains two numbers A and B.
Output
for 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

#include<bits/stdc++.h>
using namespace std;

//函数的作用为取出小数点后多余的0
string move_zero(string n)
{
    bool blog = false;
    for(int i = 0;i < n.size();i++)
    {
        if(n[i] == '.')
        {
            blog = true;
            break;
        }
    }
    if(blog)
    {
        for(int i = n.size() - 1;n[i] == '0';i--) n = n.substr(0,n.size() - 1);
        if(n[n.size() - 1] == '.') n = n.substr(0,n.size() - 1);
    }
    return n;
}

int main()
{
    string n,m;
    while(cin >> n >> m)
    {
        n = move_zero(n);
        m = move_zero(m);
        if(n == m) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

这道题一开始的思路是使用两个double类型的变量,然后通过两数之差的精度比较来判断是否一样,结果提交上去就是wa。。。后来考虑到如果2个数的大小很大甚至超过long long型,那么这样比较就是不正确的,必须要以字符串的形式来保存,这里本人选用的是string类,但是通过string类的比较提交上去还是wa。。。(有点崩溃。。。)后来想到如果一个数是12.00另一个数是12应该输出的是YES,但是结果却是NO。所以在比较这两个数之前需要把小数点之后多余的0给去除掉。
这里定义了move_zero函数来进行这项操作,先对字符串进行查找,查找是否存在小数点符号,如果不存在那就没有去除的必要了,如果有的话,需要从字符串的末尾进行查找,查找是否有0,如果有则使用substr函数来进行裁剪。裁剪完之后再查看此时字符串的最后一位是否为小数点符号,如果是的则去除。最后返回修改完的字符串。
最后需要注意的是在while中连续输入两个字符串的时候,不能以scanf(“%s %s”,n,m);这样的形式去输入,否则会出现错误,连续输入两个字符串最好使用cin或者getline()。

这里顺便来介绍一下substr函数的用法:
substr
用途:取部份字符串。
语法: string substr(string string, int start, int [length]);
返回值: 字符串

本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。

例子:
// string::substr
#include
#include
int main ()
{
std::string str=“We think in generalities, but we live in details.”;
// (quoting Alfred N. Whitehead)
std::string str2 = str.substr (3,5); // “think”
std::size_t pos = str.find(“live”); // position of “live” in str
std::string str3 = str.substr (pos); // get from “live” to the end
std::cout << str2 << ’ ’ << str3 << ‘\n’;
return 0;
}
输出:think live in details.

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/83447290