zoukankan      html  css  js  c++  java
  • HDU2054_A == B ?【模拟题】【大数】【水的问题】

    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, 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,推断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,0,sizeof(a));//存A的整数部分 
            memset(b,0,sizeof(b));//存B的整数部分 
            memset(aa,0,sizeof(aa));//存A的小数部分 
            memset(bb,0,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("YES
    ");
            else
                printf("NO
    ");
            memset(A,0,sizeof(A));
            memset(B,0,sizeof(B));
        }
    
        return 0;
    }


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Gitlab 与 Git Windows 客户端一起使用的入门流程
    怎样把SEL放进NSArray里
    PerformSelector may cause a leak because its selector is unknown 解决方法
    drawRect
    记录常规越狱的判断方法
    网页 js
    UICollectionView 基础
    FMDB的简单使用
    图层的一些基本动画效果
    NSPredicate简单介绍
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4837182.html
Copyright © 2011-2022 走看看