NYOJ 524 A-B Problem

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

猜你喜欢

转载自blog.csdn.net/wx2306/article/details/80170642
A-B