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;
}