HDU2054 A==B?

本文介绍了一种用于比较两个数值是否相等的程序实现方法。通过去除小数点后的多余零并进行字符串比较,提供了两种实现方案,包括直接字符串比较和更复杂的逐位数字比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 22 23 34 3
 

Sample Output
NOYESYESNO

费了半天的劲找到的一个例子:0.0  0  只要这个例子输出YES你的代码应该就没问题了。

主要是能好好控制 删去小数点后面的0及小数点然后再比较就行了。一开始WA了以后我看评论区,乱七八糟各种情况都想了,拜托不要想那么多好吗,没有+ -号,也不会出现这种前导0的情况 002 2 正常人会这么写吗啊?啊?啊?我竟然傻傻地去考虑了前导0的情况。。。。。

这道题用字符串比较挺方便的,方法一:

#include<string.h>
#include<stdio.h>
#define N 100000
char a[N],b[N];
int main()
{
    int len1,len2;
    while(scanf("%s%s",a,b)!=EOF)
    {
        int flag1=0,flag2=0;
        len1=strlen(a);
        len2=strlen(b);
        int i;
        for(i=0; i<len1; i++)
            if(a[i]=='.')
                flag1=1;
        for(i=0; i<len2; i++)
            if(b[i]=='.')
                flag2=1;
        if(flag1==1)
        {
            while(a[len1-1]=='0')
            {
                a[len1-1]='\0';
                len1--;
            }
            if(a[len1-1]=='.')
                a[len1-1]='\0';
        }
        if(flag2==1)
        {
            while(b[len2-1]=='0')
            {
                b[len2-1]='\0';
                len2--;
            }
            if(b[len2-1]=='.')
                b[len2-1]='\0';
        }
        if(strcmp(a,b)==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

方法二:(比较复杂)

#include<stdio.h>
#include<string.h>
#define N 100000
char a[N],b[N];
int s1[N],s11[N],s2[N],s22[N];
int main()
{
    int len1,len2,i,j,m1,m2;
    int flag1,flag2,f1,f2;
    while(scanf("%s%s",a,b)!=EOF)
    {
        flag1=0;
        flag2=0;
        f1=0;
        f2=0;
        memset(s1,0,sizeof(s1));
        memset(s11,0,sizeof(s11));
        memset(s2,0,sizeof(s2));
        memset(s22,0,sizeof(s22));
        m1=len1=strlen(a);
        m2=len2=strlen(b);
        for(i=0; i<len1; i++)
            if(a[i]=='.')
            {
                m1=i;
                f1=1;
            }
        for(i=0; i<len2; i++)
            if(b[i]=='.')
            {
                m2=i;
                f2=1;
            }
        for(i=0,j=m1-1; i<m1;i++,j--)
            s1[i]=a[j]-'0';
        for(i=m1+1,j=0; i<len1; i++,j++)
            s11[j]=a[i]-'0';
        for(i=0,j=m2-1; i<m2; i++,j--)
            s2[i]=b[j]-'0';
        for(i=m2+1,j=0; i<len2; i++,j++)
            s22[j]=b[i]-'0';
        if(f1==1)
        {
            while(s11[len1-2-m1]==0)
            {
                if(s11[len1-2-m1]==0)
                    len1--;
            }
            len1++;                    //这里++是因为比如例子0.0  0,0.0小数点后的0消除了之后,这个数字没有小数了//
        }                             //而我下面的判断是整数部分和小数部分相比较,所以我再添一个小数,下面同//
        if(f2==1)
        {
            while(s22[len2-2-m2]==0)
            {
                if(s22[len2-2-m2]==0)
                    len2--;
            }
            len2++;
        }
        for(i=0;i<m1;i++)
            if(s1[i]!=s2[i])
            flag1=1;
         for(i=0;i<len1-m1-1;i++)
            if(s11[i]!=s22[i])
            flag2=1;
        if(flag1==0&&flag2==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
HDU 2034 是一道经典的 A-B Problem 题目,通常涉及简单的数学运算或者字符串处理逻辑。以下是对此类问题的分析以及可能的解决方法。 ### HDU 2034 的题目概述 该题目要求计算两个数之间的差值 \(A - B\) 并输出结果。需要注意的是,输入数据可能存在多种情况,因此程序需要能够适应不同的边界条件和特殊情况[^1]。 #### 输入描述 - 多组测试数据。 - 每组测试数据包含两行,分别表示整数 \(A\) 和 \(B\)。 #### 输出描述 对于每组测试数据,输出一行表示 \(A - B\) 的结果。 --- ### 解决方案 此类问题的核心在于正确读取多组输入并执行减法操作。以下是实现此功能的一种常见方式: ```python while True: try: a = int(input()) b = int(input()) print(a - b) except EOFError: break ``` 上述代码片段通过循环不断接收输入直到遇到文件结束符 (EOF),适用于批量处理多组测试数据的情况。 --- ### 特殊考虑事项 尽管基本思路简单明了,在实际编码过程中仍需注意以下几点: 1. **大数值支持**:如果题目中的 \(A\) 或 \(B\) 可能非常大,则应选用可以容纳高精度的数据类型来存储这些变量。 2. **负数处理**:当 \(B>A\) 导致结果为负时,确保程序不会因符号错误而失效。 3. **异常捕获**:为了防止运行期间由于非法字符或其他意外状况引发崩溃,建议加入必要的错误检测机制。 --- ### 示例解释 假设给定如下样例输入: ``` 5 3 7 2 ``` 按照以上算法流程依次完成各步操作后得到的结果应当分别为 `2` 和 `5`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值