解题代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int nmax = 1000;
char str[nmax];
int step, s;
struct bign {
int len;
int p[nmax];
bign() {
len = 0;
memset(p, 0, sizeof(p));
}
};
bool judge(bign a) {
for (int i = 0; i < a.len / 2; i++)
if (a.p[i] != a.p[a.len - i - 1]) return false;
return true;
}
bign change(char str[]) {
bign a;
a.len = strlen(str);
for (int i = 0; i < a.len; i++)
a.p[i] = str[a.len - i - 1] - '0';
return a;
}
bign add(bign a, bign b) {
bign c;
int carry = 0;
for (int i = 0; i < a.len || i < b.len; i++) {
int temp = a.p[i] + b.p[i] + carry;
c.p[c.len++] = temp % 10;
carry = temp / 10;
}
if (carry) c.p[c.len++] = carry;
return c;
}
int main() {
scanf("%s%d", str, &step);
bign a = change(str);
while (!judge(a) && s != step) {
bign b = a;
reverse(b.p, b.p + b.len);
bign c = add(a, b);
a = c;
s++;
}
for (int i = 0; i < a.len; i++)
printf("%d", a.p[a.len - i - 1]);
printf("\n%d", s);
return 0;
}
测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c879731014897e0e0904ccbba98281c9.png)
问题整理
1.大整数运算。
2.注意区分carry和temp。