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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |