ZOJ 1205 Martian Addition

2014-11-24 03:23:26 · 作者: · 浏览: 0

解析

1.注意20进制的字符数字转换;

2.注意字符开头的“0”得屏蔽掉,例如“001+002=3”;

3.注意类似 “jj+jj=1ji”的问题;

4.最坑的一个数据 0+0=0;

代码

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #define MIN(a,b) (a
       
        b a:b) using namespace std; char str1[110], str2[110]; int num1[110], num2[110], num[110]; int main(){ int i, j; int len1, len2, len; int flag; while(~scanf(%s%s, str1, str2)){ memset(num1, 0, sizeof(num1)); memset(num2, 0, sizeof(num2)); memset(num, 0, sizeof(num)); len1 = strlen(str1); len2 = strlen(str2); len = MAX(len1, len2); /*转换为20进制*/ for(i=0; i
        
         ='0'&&str1[i]<='9') num1[len1-i] = str1[i]-'0'; else num1[len1-i] = str1[i]-'a'+10; } for(i=0; i
         
          ='0'&&str2[i]<='9') num2[len2-i] = str2[i]-'0'; else num2[len2-i] = str2[i]-'a'+10; } /*相加*/ for(i=1; i<=len+1; ++i){ num[i] = num[i-1]/20+num1[i]+num2[i]; num[i-1] = num[i-1]%20; } for(i=len+1; i>1; --i) if(num[i]) break; for (j=i; j>0; --j){ if(num[j]>9) printf(%c, num[j]-10+'a'); else printf(%d, num[j]); } printf( ); } return 0; }