天天看點

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