HDOJ 2100 Lovekey HDU 2100 Lovekey

HDOJ 2100 Lovekey HDU 2100 Lovekey  http://acm.hdu.edu.cn/showproblem.php?pid=2100 

 

题目不难,模拟算26进制的加法

 

当然还是有很大的优化的空间的

 

 

 

 

 

// s1 s2为加数 ss保存结果(int型) xx保存最终结果 // 最后一位对齐,每一位相加 , #include <iostream> #include <string> using namespace std; int main() { string s1,s2; int ss[205]; char xx[205]; while(cin>>s1>>s2) { memset(ss,0,sizeof(ss)); memset(xx,0,sizeof(xx)); int len,i,j,k,temp,flag; len=s1.length(); if(s2.length()>len) len=s2.length(); i=s1.length()-1; j=s2.length()-1; k=len-1; temp=0; while(k>=0) // k控制 循环最多扫描这么多次 { ss[k]= (s1[i]-'A') + (s2[j]-'A') +temp; // 相加 注意进位 temp=0; if(ss[k]>25) 是否有进位 { ss[k]=ss[k]-26; temp=1; } i--;j--;k--; if(i<0) //因为是从后面向前面相加的,所以,如果超过数组下界要特殊处理, { s1[0]='A'; i=0; } if(j<0) { s2[0]='A'; j=0; } } for(i=0;i<len;i++) // 转化为 字符型 { xx[i]=ss[i]+'A'; } if(temp==1) // 第一位是否有进位 ,有则 先输出一个B { cout<<"B"; for(i=0;i<len;i++) { cout<<xx[i]; } cout<<endl; } else //没有进位,要注意除掉前面的0 既 'A' { flag=0; for(i=0;i<len;i++) { if(xx[i]!='A') flag=1; if(flag==1) cout<<xx[i]; } cout<<endl; } } }

 

 

 

你可能感兴趣的:(优化,String)