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

NYOJ.524.A-B Problem

发布时间:2020-12-14 04:13:53 所属栏目:大数据 来源:网络整理
导读:524.A-B Problem 时间限制:1000 ms? |? 内存限制:65535 KB 难度:3 描述 A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。 现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢? 输入 有多组测试数据。每组数据包括两行

524.A-B Problem

时间限制:1000 ms? |? 内存限制:65535 KB
难度:3
描述
A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。

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

输入
有多组测试数据。每组数据包括两行,分别代表A和B。
它们的位数小于100,且每个数字前中可能包含+,- 号。
每个数字前面和后面都可能有多余的0。
每组测试数据后有一空行。
输出
对于每组数据,输出一行。
如果A-B=0,输出YES,否则输出NO。
样例输入
1
1

1.0
2.0
样例输出
YES

NO

-----------------------------------------------------------------------------------------------------------

这又是NYOJ里一道分类为大数问题的题目,一种做法是写出两个大数相减的算法,因为仅要求比较大小,这里仅仅进行了字符串比较

#include <stdio.h>
#include <string.h>
int main(){
  char s[2][110]={0},*p[2],n[2],i,j,k,r;
  while(~scanf("%s %s",s[0],s[1])){
    for(i=0;i<2;i++){
      j=0;//指示数字非符号位开始的位数
      n[i]=1;
      r=s[i][0];
      if(r=='+')//如果有符号,则j=1
        j=1;
      else if(r=='-'){
        j=1;
        n[i]=-1;//n[i]=-1表示负数,1表示正数
      }
      while(s[i][j]=='0') j++;//找到第一个非零位
      p[i]=&s[i][j];
      if(strstr(s[i],".")){//查找小数点
        k=strlen(s[i])-1;
        while(s[i][k]=='0') s[i][k--]=0;//找到小数部分从右往左第一个非零位,并将为0的位赋值为''
        if(s[i][k]=='.')//如果小数部分全为0,则将小数点改为字符串结束字符
          s[i][k]=0;
      }
    }
    r=0;
    if(!p[0][0] && !p[1][0])//如果整数小数部分均为0,则此时两个字符串均为空字符串,+0和-0输入解决了
      r=1;
    else if(!strcmp(p[0],p[1]) && n[0]*n[1]>0)//字符串相等且同号
      r=1;
    printf("%sn",r?"YES":"NO");
  }
  return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读