A-B Problem

来源:互联网 发布:淘宝电子积木 编辑:程序博客网 时间:2024/05/24 02:20

描述

A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。

现在有两个实数AB,聪明的你,能不能判断出A-B的值是否等于0呢?

输入

有多组测试数据。每组数据包括两行,分别代表AB
它们的位数小于100,且每个数字前中可能包含+,- 号。
每个数字前面和后面都可能有多余的0
每组测试数据后有一空行。

输出

对于每组数据,输出一行。
如果A-B=0,输出YES,否则输出NO

样例输入

1

1

1.0

2.0

样例输出

YES

NO


答案:

#include <stdio.h>

#include <ctype.h>

#include <string.h>

#include <stdlib.h>

const int M=100;

void back(char* c,int &l)

{

    if(strchr(c,'.') == NULL)

        return ;

    for(int i=l-1;i>=1;i--)

    {

        if(c[i]!='0')

            break;

        l--;

    }

    if(c[l-1]=='.')

        l--;

    c[l]='\0';

    //puts("after back->");

    //puts(c);

}

void front(char* c,int &l,bool &f)

{

    int cnt = isdigit(c[0]) ? 0 : 1;

    if(c[0]=='-')

        f = false;

    for(int i=cnt;i<l-1;i++)

    {

        if(c[i+1]=='.' || c[i]!='0')

            break;

        cnt++;

    }

    if(cnt)

    {

        for(int i=0;i<l-cnt;i++)

            c[i] = c[i+cnt];

        c[l-cnt] = '\0';

    }

    //puts("after front->");

    //printf(f?"+ ":"- ");

    //puts(c);

}

void deal(char *c,bool &f)

{

    int l = strlen(c);

    f = true;

    back(c,l);

    front(c,l,f);

}

bool Cmp(char* A,char* B,bool a,bool b)

{

    if(strcmp(A,B) == 0)

    {

        if(strcmp(A,"0") == 0 || a^b == 0)

            return true;

    }

    return false;

}

int main()

{

    char A[M],B[M];

    bool a,b;

    while(~scanf("%s%s",A,B))

    {

        deal(A,a);

        deal(B,b);

        puts(Cmp(A,B,a,b)?"YES":"NO");

    }

    return 0;

}


原创粉丝点击