using namespace std;
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include <ctime>
#include <cmath>
typedef struct bign
{
int d[100];//太小容易溢出
int len;
} bign;
bign Raw = {0}, Turn = {0};//Raw为原始数据,D为其二倍
bool isPalindromic(bign A)//判断是否回环
{
for(int i=0, j=A.len-1; i<j; i++, j--)
{
if(A.d[i] != A.d[j]) return false;
}
return true;
}
bign Reverse(bign A)//翻转
{
for(int i=0, j=A.len-1; i<j; i++, j--)
swap(A.d[i], A.d[j]);
return A;
}
bign ADD(bign A, bign B)//求和
{
bign C = {0};
int i, carry = 0, len = max(A.len, B.len);
for(i=0; i<len; i++)
{
C.d[i] = (A.d[i]+B.d[i]+carry)%10;
if((A.d[i]+B.d[i]+carry)/10) carry = 1;
else carry = 0;
}
if(carry) C.d[i++] = carry;
C.len = i;
return C;
}
int main()
{
int cnt = 0, K;
char S[30];
scanf("%s %d", S, &K);
Raw.len = strlen(S);
for(int i=0; i<Raw.len; i++) Raw.d[i] = S[Raw.len-1-i] - '0';//让高位存放高位
while(cnt<K && !isPalindromic(Raw))
{
Turn = Reverse(Raw);//翻转
Raw = ADD(Raw, Turn);//求和
cnt++;
}
for(int i=Raw.len-1; i>=0; i--) printf("%d", Raw.d[i]);//打印输出
printf("\n%d", cnt);
return 0;
}
PAT (Advanced Level) Practice A1024 Palindromic Number (25 分)(C++)(甲级)(大数求和、回环数)
最新推荐文章于 2022-10-25 09:02:44 发布