1024. Palindromic Number (25) @ PAT (Advanced Level) Practise

来源:互联网 发布:阿里云代理商查询 编辑:程序博客网 时间:2024/06/05 19:57

Version 2: 模拟加法(http://blog.csdn.net/yhhhyfyy/article/details/8594868)

#include<iostream>#include<string>#include<algorithm>           //reverse函数用到using namespace std; string add(strings1,string s2){stringresult="";    int carry=0;intlen=s1.length();intsum;while(len--){sum=s1[len]-'0'+ s2[len]-'0'+carry;result.insert(result.begin(),sum%10+'0');carry=sum/10;}if(carry)        //最终和有进位{       result.insert(result.begin(),carry+'0');}returnresult;} int main(){   string s1,s2,result;     //s1作为输入,s2是翻转后的字符串   int k,ans=0;            //ans保存翻转求和次数   cin>>s1>>k;   while (ans!=k)   {   s2=s1;   reverse(s2.begin(),s2.end());   if (s1==s2)           //若回文   {   break;   }   else                  //否则继续翻转求和   {   s1=add(s1,s2);   }   ans++;   }  cout<<s1<<endl<<ans<<endl;   return 0;}

 

Version 1: case 6 & case 8 内存超限

 

#include<iostream>#include<sstream>#include<string>#include<algorithm>using namespace std;stringstream ss;int icount=0;boolisPalindromic(string & s){inti=0;intj=s.length()-1;for(;i<j;i++,j--){if(s[i]!=s[j])returnfalse;}returntrue;}voidtransform(string & s){longtmp1,tmp2;ss.clear();ss<<s;ss>>tmp1;ss.clear();reverse(s.begin(),s.end());ss<<s;ss>>tmp2;ss.clear();ss<<tmp1+tmp2;ss>>s;icount++;}int main(){stringnum;intk;cin>>num>>k;while(!isPalindromic(num)&& icount<k){transform(num);}cout<<num<<endl;cout<<icount;return0;}