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
解题思路:先将A和B分成一般的数,即去掉前面和后面多余的0,去掉‘+’‘-’号,然后比较A和B是否相等,注意+0 和-0
代码如下:
# include<stdio.h> # include<string.h> char a[105],b[105],a1[105],b1[105]; int sweap(char a[],char b[]) //转换 { int len=strlen(a); int i=0,k=1,l=0; //k 保存正负号 while(a[i]=='+') { k=1; i++; } while(a[i]=='-') { k=0; i++; } int flag=0;//判断‘.’有没有数字 int j=i; while(a[j]!='.'&&j<len) { if(a[j]!='0') flag=1; j++; } if(!flag) //若没有赋0 b[l++]='0'; else //否则将它们提取出来 { while(a[i]!='.'&&i<len&&a[i]=='0') i++; while(a[i]!='.'&&i<len) b[l++]=a[i++]; } if(a[j]=='.'&&j<len)//小数点后面多余的0 如12.12000000000 { i=len-1; //从最后观察 while(a[i]!='.'&&a[i]=='0') i--; if(i!=j) { while(j<=i) b[l++]=a[j++]; } } b[l++]='\0';//************** return k; } int main(){ while(~scanf("%s%s",a,b)) { int k=sweap(a,a1); //a1 保存转换后的a int k1=sweap(b,b1);//b1 保存转换后的b if((k==k1&&strcmp(a1,b1)==0)||(strcmp(a1,"0")==0)&&strcmp(b1,"0")==0)//比较,+0和-0单独判断 printf("YES\n"); else printf("NO\n"); } return 0; }