ZOJ 1205 Martian Addition

来源:互联网 发布:狂鼠伤害数据 编辑:程序博客网 时间:2024/06/05 03:00

ZOJ  1205    Martian Addition

          面对着一道做了三个晚上才A掉的简单题,应该是什么心情呢?算了,希望花能开好。

          代码和教训如下:

        

#include<stdio.h>#include<string.h>int main(){ int i,c[150],d[150],e[150],ma,mb,larger,f,g; char t,sum[150],a[150],b[150]; while(scanf("%s%s",a,b)!=EOF){ ma = strlen(a)-1;     mb = strlen(b)-1; for(i = 0;i<=ma;i++){ if(a[i]>='0'&&a[i]<='9') continue;                 /////////////话说以后尽量写程序的时候重复的地方多写成函数,加油! else if(a[i]>='a'&&a[i]<='j') continue; else break; }                            /////////////这里一定要注意,因为输入可能有不合法字符的时候,读到不合法字符就可以默认为这个数字结束了 ma = i-1; for(i = 0;i<=mb;i++){ if(b[i]>='0'&&b[i]<='9') continue; else if(b[i]>='a'&&b[i]<='j') continue; else break; } mb = i-1; for(i=0;i<=130;i++){                ///////////这里千万要注意,数字的大小为150,那么这里的数字一定要小于他,教训!!!卡在这里好久!!! e[i] = 0; c[i] = 0;  d[i] = 0; }  for(i = 0;i<=ma/2;i++){   t = a[ma-i];   a[ma-i] = a[i];             a[i] = t;  }                                    for(i = 0;i<=mb/2;i++){    t = b[mb-i];   b[mb-i] = b[i];       b[i] = t;  }  for(i = 0;i<=ma;i++){   if(a[i]>='0'&&a[i]<='9')    c[i] = a[i]-'0';                if(a[i]>='a'&&a[i]<='j')    c[i] = a[i] - 'a'+10;  }                                   for(i = 0;i<=mb;i++){   if(b[i]>='0'&&b[i]<='9')      d[i] = b[i]-'0';          if(b[i]>='a'&&b[i]<='j')     d[i] = b[i] - 'a'+10;  }  larger = ma;  if(ma<mb)  larger = mb;  for(i = 0;i<=larger;i++){  e[i] = e[i]+c[i]+d[i];  if(e[i]/20>0){                     e[i+1] = e[i]/20;   e[i] = e[i]%20;  }                       }  if(e[larger+1]>0){   larger++;  }  for(i = 0;i<=larger;i++){   if(e[i]<=9)    sum[i] = '0'+e[i]-0;   else                                sum[i] = 'a'+e[i]-10;  }  for(i = 0;i<=larger/2;i++){   t = sum[larger-i];   sum[larger-i] = sum[i];                sum[i] = t;  }  f = 0;  g = 0;  for(i = 0;i<=larger-1;i++){  if(sum[i]!='0'){  f = 1;  break;  }  if(f==0){                         //////这里是对最后的结果如果开头有 '0',要去掉,这个做最简便,不然如果在收进数据的时候判断,情况太复杂  g++;                           //////////包括开头带0,真个大数字不全为0,也有可能整个大数字是一串0或者是一个单独的0,处理繁琐  }  }  larger = larger-g;  for(i = 0;i<=larger;i++){  sum[i] = sum[i+g];  }  for(i = 0;i<=larger;i++){                 printf("%c",sum[i]);  }  printf("\n"); } return 0;}


 

        

 

原创粉丝点击