【PAT Advanced Level】1024. Palindromic Number (25)

来源:互联网 发布:粮食安全 大数据 编辑:程序博客网 时间:2024/05/22 16:56

回文数

#include<iostream>  #include<vector>  #include<set>  #include<map>  #include<queue>  #include<algorithm>  #include<string>  #include<string.h>  using namespace std;  string Reverse(string a)  {  string ans;  for(int i = 0; i < a.size(); ++i)  ans.insert(ans.begin(), a[i]);  return ans;  }  int char2int(char a)  {  return a-'0';  }  char int2char(int a)  {  return a+'0';  }  string Sum(string a, string b)  {  string ans;  int carry = 0;  int p;  for(p = 0; p < a.size() && p < b.size(); ++p)  {  int tmp = char2int(a[p])+char2int(b[p])+carry;  ans.push_back(int2char(tmp%10));  carry = tmp/10;  }  for( ;p < a.size(); ++p)  {  int tmp = char2int(a[p])+carry;  ans.push_back(int2char(tmp%10));  carry = tmp/10;  }  for( ;p < b.size(); ++p)  {  int tmp = char2int(b[p])+carry;  ans.push_back(int2char(tmp%10));  carry = tmp/10;  }  if(carry != 0) ans.push_back(int2char(carry));  return Reverse(ans);  }  int main()  {  string a;  int k;  cin>>a;  scanf("%d",&k);  bool flag = false;  string result = a;  int step = 0;  do  {  if(result == Reverse(result))  {  flag = true;  cout<<result<<endl;  printf("%d\n", step);  break;  }  string b = Reverse(result);  result = Sum(Reverse(b), Reverse(result));  step++;  }while(step < k);  if(!flag)   {  cout<<result<<endl;  printf("%d\n", k);  }  return 0;  }