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
- 来源
- hdu改编
1 #include <stdio.h> 2 #include <string.h> 3 #define MAX 100000 4 5 char str1[MAX+10],str2[MAX+10]; 6 int a1[MAX+10],a2[MAX+10],b1[MAX+10],b2[MAX+10]; 7 8 int bijiao(char *str1,char *str2) 9 { 10 int len1,len2; 11 int i,j,k,t; 12 for(i=0;i<MAX+10;i++) 13 a1[i]=a2[i]=b1[i]=b2[i]=0; 14 len1=strlen(str1); 15 for(i=0;i<len1;i++) 16 if(str1[i]=='.') 17 {t=i;break;} 18 if(i>=len1) 19 t=len1; 20 for(j=0,i=t-1;i>=0;i--) 21 a1[j++]=str1[i]-'0'; 22 for(j=0,i=t+1;i<len1;i++) 23 a2[j++]=str1[i]-'0'; 24 len2=strlen(str2); 25 for(i=0;i<len2;i++) 26 if(str2[i]=='.') 27 {t=i;break;} 28 if(i>=len2) 29 t=len2; 30 for(j=0,i=t-1;i>=0;i--) 31 b1[j++]=str2[i]-'0'; 32 for(j=0,i=t+1;i<len2;i++) 33 b2[j++]=str2[i]-'0'; 34 if(len1==0&&len2==0) 35 return 0; 36 for(i=0;i<MAX;i++) 37 { 38 if(a1[i]!=0||a2[i]!=0||b1[i]!=0||b2[i]!=0) 39 break; 40 } 41 if(i>=MAX) 42 return 2; 43 for(i=0;i<MAX;i++) 44 { 45 if(a1[i]!=b1[i]) 46 { 47 k=0; 48 break; 49 } 50 } 51 if(i>=MAX) 52 { 53 for(i=0;i<MAX;i++) 54 { 55 if(a2[i]!=b2[i]) 56 { 57 k=0; 58 break; 59 } 60 } 61 if(i>=MAX) 62 k=1; 63 } 64 return k; 65 //puts(str1); 66 //puts(str2); 67 } 68 int main() 69 { 70 while(scanf("%s%s",str1,str2)!=EOF) 71 { 72 int t=0,k; 73 //gets(str2); 74 //getchar(); 75 if((str1[0]>='0'&&str1[0]<='9')&&(str2[0]>='0'&&str2[0]<='9')) 76 k=bijiao(str1,str2); 77 else if((str1[0]>='0'&&str1[0]<='9')&&(str2[0]=='+')) 78 k=bijiao(str1,str2+1); 79 else if((str2[0]>='0'&&str2[0]<='9')&&(str1[0]=='+')) 80 k=bijiao(str1+1,str2); 81 else if(str1[0]==str2[0]) 82 k=bijiao(str1+1,str2+1); 83 else if(str1[0]=='.'||str2[0]=='.') 84 k=bijiao(str1,str2); 85 else 86 { 87 t=bijiao(str1+1,str2+1); 88 if(t==2) 89 k=1; 90 else 91 k=0; 92 } 93 if(k) 94 printf("YES "); 95 else 96 printf("NO "); 97 } 98 return 0; 99 } 100 //没考虑 (.1和 0.1)这组数据
/* 测试数据
0 -0
0 +0
123.123 +00123.12300
100.00 100
.1 0.1
000.000 0
123456789123456789
123456789123456789
1 1
000001000. 1000
+0 -000.000
.0 0
.0 0.
结果全是YES
这些测试数据如果过了基本差不多可以AC了 这都是WA出来的。。。。 */
和hdu2054类似,这题的测试数据更严格