这题写的比较匆忙, 代码有点乱, 仅供参考. 有个坑就是一开始给的数字就是回文串, 要先判断, 注意一下.
- #include <iostream>
- #include <string.h>
- #include <cstdio>
- #include <algorithm>
- #include <cstdlib>
- #include <math.h>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <unordered_map>
- #define maxn 1005
- #define INF 0x3f3f3f3f
- using namespace std;
- typedef long long ll;
- int n,len,t1,t2,p,q,cnt;
- string s;
- int a[maxn],b[maxn],c[maxn];
- bool judge(int arr[])
- {
- for(int i=0;i<q/2;i++)
- {
- if(c[i]!=c[q-i-1])
- return false;
- }
- return true;
- }
- int main()
- {
- cin>>s>>n;
- p=0;
- for(int i=0;i<s.length();i++)
- a[p++]=s[i]-'0';
- int flag=1;
- for(int i=0;i<p;i++)
- {
- if(a[i]!=a[p-i-1])
- {
- flag=0;
- break;
- }
- }
- if(flag)
- {
- for(int i=0;i<p;i++)
- cout<<a[i];
- cout<<endl;
- cout<<0<<endl;
- return 0;
- }
- while(n--)
- {
- cnt++;
- for(int i=0;i<p;i++)
- b[i]=a[p-i-1];
- t2=0;
- q=0;
- for(int i=p-1;i>=0;i--)
- {
- t1=(a[i]+b[i]+t2)%10;
- t2=(a[i]+b[i]+t2)/10;
- c[q++]=t1;
- }
- if(t2>0)
- c[q++]=t2;
- if(judge(c))
- {
- for(int i=q-1;i>=0;i--)
- cout<<c[i];
- cout<<endl;
- cout<<cnt<<endl;
- return 0;
- }
- for(int i=0;i<q;i++)
- {
- a[i]=c[q-i-1];
- }
- p=q;
- }
- for(int i=q-1;i>=0;i--)
- cout<<c[i];
- cout<<endl;
- cout<<cnt<<endl;
- return 0;
- }
- View Code
来源: http://www.bubuko.com/infodetail-2998592.html