EOJ-2032 判断两个数是否相等

http://acm.cs.ecnu.edu.cn/problem.php?problemid=2032

测试数据必须用字符串处理,情况比较多,代码比较乱,仅说明思路。

将两个字符串进行“正常化”,即变成正常的数据(没有符号,前置零等等)

case 1: .xxxxx  即小数点前面无零 需在前加0。

case 2: 前置符号+或-,记录一下符号,并去除、 #特殊情况: +. xxx  或 -. xxx  符号后面直接加小数点,需在前面加零。

case 3:去除前置零: 00000xxxx  或者是00000000的情况,去除多余的零,但要小心0. XX的情况。

case 4:去除后置0:即xx.xx00000000,需注意xx.xxx000000x之类的情况,以及x.00000的情况。

case 5:两个都是零,但是输入是-0和0 此时符号不同 也应该特殊判断。

  1 #include<iostream>
  2 #include<algorithm>
  3 #include<cstdio>
  4 #include<cstring>
  5 #include<cstdlib>
  6 #include<cmath>
  7 #include<string>
  8 #include<cctype>
  9 using namespace std;
 10 int main(){
 11     char a[505],b[505];
 12     while(scanf("%s%s",a,b)!=EOF){
 13         char s[505],t[505];
 14         int len=strlen(a);
 15         int pa=1,f=1;
 16         if(a[0]=='.') {s[0]='0';strcpy(s+1,a);f=0;}                //case 1  .xxx
 17         if(a[0]=='-') {                                            //case 2  -xxx
 18             pa=0;
 19             if(a[1]=='.'){                                        //#特殊情况 -.xxxx
 20                 s[0]='0';
 21                 strcpy(s+1,a+1);
 22                 f=0;
 23             }
 24         }
 25         if(a[0]=='+' && a[1]=='.'){                                //同上
 26                 s[0]='0';
 27                 strcpy(s+1,a+1);
 28                 f=0;    
 29         }
 30         if(f){
 31             for(int i=0;i<len;i++){                                //case 3, 三个或分别对应三种情况00xx,0.xx,0000
 32                 if(isdigit(a[i]) && a[i]!='0'|| a[i]=='0' && a[i+1]=='.' || a[i]=='0' && a[i+1]==0){
 33                     strcpy(s,a+i);
 34                     break;
 35                 }
 36             }
 37         }
 38         len=strlen(s);
 39         int k=0,m=0,tag=-1;                                        //case 4  xx.xxx000 
 40         for(int i=0;i<len;i++){
 41             if(s[i]=='.')k=1;                                    //必须去除的是小数点后的零
 42             if(k && m==0){                                        //出现0则标记将要删除的首位置
 43                 if(s[i]=='0'){ tag=i; m=1;}
 44             }
 45             if(m==1){
 46                 if(s[i]!='0') m=0;                                //如果下一个不是0,则需要重新标记
 47             }
 48         }
 49         if(tag!=-1 && m!=0){                                    //如果m=1,那一定没有后置零
 50             if(s[tag-1]=='.')s[tag-1]=0;                        //特殊情况,x.0000
 51             else s[tag]=0;
 52         }    
 53     /////////////////////////////////////////////////////////////        上面下面是一样的
 54         len=strlen(b);
 55         int pb=1;
 56         f=1;
 57         if(b[0]=='.') {t[0]='0';strcpy(t+1,b);f=0;}
 58         if(b[0]=='-') {
 59             pb=0;
 60             if(b[1]=='.'){
 61                 t[0]='0';
 62                 strcpy(t+1,b+1);
 63                 f=0;
 64             }
 65         }
 66         if(b[0]=='+' && b[1]=='.'){
 67                 t[0]='0';
 68                 strcpy(t+1,b+1);
 69                 f=0;    
 70         }        
 71         if(f){
 72             for(int i=0;i<len;i++){
 73                 if(isdigit(b[i]) && b[i]!='0'|| b[i]=='0' && b[i+1]=='.' || b[i]=='0' && b[i+1]==0){
 74                     strcpy(t,b+i);
 75                     break;
 76                 }
 77             }
 78         }
 79         len=strlen(t);
 80         k=0,m=0,tag=-1;
 81         for(int i=0;i<len;i++){
 82             if(t[i]=='.')k=1;
 83             if(m==1){
 84                 if(t[i]!='0') m=0;
 85             }
 86             if(k && m==0){
 87                 if(t[i]=='0'){ tag=i; m=1;}
 88             }
 89         }
 90         if(tag!=-1 && m!=0){
 91             if(t[tag-1]=='.')t[tag-1]=0;
 92             else t[tag]=0;
 93         }    
 94         //printf("%s %s\n",s,t);
 95         if(pa!=pb){
 96             if(strcmp(s,"0")==0 && strcmp(t,"0")==0)                //case 5
 97              printf("It's xiao qiang\n");
 98             else printf("It isn't xiao qiang\n");
 99         }
100         else if(strcmp(s,t)) printf("It isn't xiao qiang\n");
101         else printf("It's xiao qiang\n");
102     }
103     return 0;
104 }
View Code

 

 

 

posted on 2013-06-12 03:18  KimKyeYu  阅读(272)  评论(0编辑  收藏  举报

导航