Sample Input 1
67 3
Sample Output 1
484
2
Sample Input 2
69 3
Sample Output 2
1353
3
思路:
考虑高精度,写一个check判断回文数,从0开始判断,如果本身就是回文或k为0,则直接输出,否则按照运算律计算。、
不难,但是我的代码写的不是很优雅。
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
typedef long long ll;
bool check(int* a, int len)
{
for (int i = 0; i < len / 2; ++i)
if (a[i] != a[len - 1 - i])
return 0;
return 1;
}
int main()
{
char str[100];
int k;
scanf("%s", str);
scanf("%d", &k);
int a[100], b[200] = {0}, c[100];
int len = strlen(str);
for (int i = 0; i < strlen(str); ++i)
{
a[i] = str[i] - '0';
}
if (k == 0)
{
for (int i = 0; i < len; ++i)
printf("%d", a[i]);
printf("\n%d", k);
return 0;
}
if (check(a, len))
{
for (int i = 0; i < len; ++i)
{
printf("%d", a[i]);
}
printf("\n0");
return 0;
}
for (int j = 1; j <= k; ++j)
{
memset(b, 0, sizeof(b));
for (int i = 0; i < len; ++i)
{
b[i] = a[i] + a[len - 1 - i] + b[i];
if (b[i] >= 10)
{
b[i + 1]++;
b[i] %= 10;
if (i == len - 1)
{
len++;
break;
}
}
}
if (check(b, len))
{
for (int i = len - 1; i >= 0; --i)
printf("%d", b[i]);
printf("\n%d", j);
break;
}
else if (j == k)
{
for (int i = len - 1; i >= 0; --i)
printf("%d", b[i]);
printf("\n%d", j);
break;
}
else
{
for (int i = 0; i <= len; ++i)
{
a[i] = b[i];
}
}
}
// getchar(); getchar();
return 0;
}