HDU 2054 A == B ? 字符串比对

原题 http://acm.hdu.edu.cn/showproblem.php?pid=2054

题目:

A == B ?

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 75835 Accepted Submission(s): 12024

Problem Description
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

思路:

很简单的比较,A=B的时候输出YES。
但是会有哪些数据呢?
1 1? 1.0 1? 1.00 1.0? 0.0 0?
而且没有限制数据大小,这种情况下只有用高精度了。
首先我们需要看是否有小数点,并将有小数点的后导0全删掉,没有小数的时候小数点也删掉。
然后进行字符串比对。

代码:

c++代码如下:

#include <iostream>
#include"string.h"
#include"cstdio"
#include"stdlib.h"
#include"algorithm"
#include"math.h"

using namespace std;
typedef long long int lint;

int main()
{
    char s1[100000];
    char s2[100000];
    memset(s1,'\0',sizeof(s1));
    memset(s2,'\0',sizeof(s2));
    while(scanf("%s %s",s1,s2)!=EOF)
    {
        int la=strlen(s1);
        int flag1=0;
        for(int i=0; i<la; i++)
        {
            if(s1[i]=='.')
            {
                flag1=1;
                break;
            }
        }
        if(flag1)
        {
            for(int i=la-1; i>=0; i--)
            {
                if(s1[i]=='0')
                    s1[i]='\0';
                else if(s1[i]=='.')
                {
                    s1[i]='\0';
                    break;
                }
                else
                    break;
            }
        }

        int lb=strlen(s2);
        int flag2=0;
        for(int i=0; i<lb; i++)
        {
            if(s2[i]=='.')
            {
                flag2=1;
                break;
            }
        }
        if(flag2)
        {
            for(int i=lb-1; i>=0; i--)
            {
                if(s2[i]=='0')
                    s2[i]='\0';
                else if(s2[i]=='.')
                {
                    s2[i]='\0';
                    break;
                }
                else
                    break;
            }
        }
        if(strcmp(s1,s2))   printf("NO\n");
        else    printf("YES\n");
        memset(s1,'\0',sizeof(s1));
        memset(s2,'\0',sizeof(s2));
    }
    return 0;
}

Java的高精度做的很好,直接调用compareTo函数比较即可。
Java高精度代码如下:

import java.util.Scanner;
import java.math.BigDecimal;

public class Main {
    public static void main(String[] args)  
    { 
        Scanner scanner=new Scanner(System.in);
        BigDecimal a; 
        BigDecimal b;
        while(scanner.hasNext())
        {
            a=scanner.nextBigDecimal();
            b=scanner.nextBigDecimal();
            int c=a.compareTo(b);
            if(c==0)    System.out.println("YES");
            else System.out.println("NO");

        } 
        scanner.close();
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值