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的位赋值为'\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("%s\n",r?"YES":"NO"); } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。