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