加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

HDU2054_A == B ?【模拟题】【大数】【水题】

发布时间:2020-12-14 02:57:06 所属栏目:大数据 来源:网络整理
导读:A == B ? Time Limit: 1000/1000 MS (Java/Others) ? ?Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 64243 ? ?Accepted Submission(s): 10061 Problem Description Give you two numbers A and B,if A is equal to B,you should print "
A == B ?


Time Limit: 1000/1000 MS (Java/Others) ? ?Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 64243 ? ?Accepted Submission(s): 10061

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,or print "NO".
?
Sample Input
1 2
2 2
3 3
4 3
?
Sample Output
NO
YES
YES

NO


题目大意:给你两个数A和B,判断A和B是否相等,若相等输出"YES",

否则输出"NO"。

思路:题目没有给出A、B的数据规模,这里就是个大数题。把A、B用

字符数组存起来,标记A、B的正负号,若为正,则标记为1,若为负,

则标记为0,将字符数组内的'-'赋值为'0',然后将整数前的零和小数部分

后边的零清除,然后用数组将整数部分和小数部分分别存起来。之后分别

比较A、B的整数部分和小数部分是否相等。注意A、B可能为整数或是小

数,尤其注意A、B可能会在整数部分前边有N个零或者小数部分后边有N

个零,比如00012、123.123000、0.00、012.200等等。具体解题过程

看下面代码。


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char A[20020],B[20020];
char a[20020],aa[20020],b[20020],bb[20020];
int main()
{
    int flagA,flagB,lenA,lenB,markA,markB;
    while(~scanf("%s%s",A,B))
    {
        memset(a,sizeof(a));//存A的整数部分 
        memset(b,sizeof(b));//存B的整数部分 
        memset(aa,sizeof(aa));//存A的小数部分 
        memset(bb,sizeof(bb));//存B的小数部分 
        flagA = flagB = 1;//标记正负数,1为整数,0为负数 
        markA = markB = 0;//标记小数点,1为有小数点,0为没有小数点 
        
		if(A[0] == '-')//标记并清除A、B的正负号 
        {
            flagA = 0;
            A[0] = '0';
        }
        if(B[0] == '-')
        {
            flagB = 0;
            B[0] = '0';
        }
        
        lenA = strlen(A);
        lenB = strlen(B);
        int numa = 0,i;

        for(i = 0; i < lenA; i++)//清除A的整数部分前面的零 
            if(A[i]!='0')
                break;
        if(i==lenA || A[i]=='.')//若整数部分全为0,则数组a为"0" 
            a[0] = '0';
        for(; i < lenA; i++)//用数组a记录A的整数部分 
        {
            if(A[i]!='.')
                a[numa++] = A[i];
            else
            {
                markA = 1;
                break;
            }
        }
        int j,numaa = 0;
        for(j = lenA-1;j > i; j--)//清除A小数部分后边的零 
            if(A[j]!='0')
                break;
        if(j == i)//若小数部分全为0,则数组aa为"0" 
            aa[0] = '0';
        for(;j > i; j--)//用数组aa记录A的小数部分 
        {
            aa[numaa++] = A[j];
        }
		//B和A的处理一样 
        int k,l;
        for(k = 0; k < lenB; k++)
            if(B[k]!='0')
                break;
        if(k == lenB || B[k]=='.')
            b[0] ='0';
        int numb = 0;
        for(; k < lenB; k++)
        {
            if(B[k]!='.')
                b[numb++] = B[k];
            else
            {
                markB = 1;
                break;
            }

        }

        int numbb = 0;
        for(l = lenB-1;l > k; l--)
            if(B[l]!='0')
                break;
        if(l==k)
            bb[0]='0';
        for(;l > k; l--)
        {
            bb[numbb++] = B[l];
        }

        if(markA == 0)
            aa[0] = '0';
        if(markB == 0)
            bb[0] = '0';
        if(flagA==flagB && strcmp(a,b)==0 && strcmp(aa,bb)==0)//判断A、B是否相等 
            printf("YESn");
        else
            printf("NOn");
        memset(A,sizeof(A));
        memset(B,sizeof(B));
    }

    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读