题目注意点
- 注意大整数加法的最后一次进位,不要忘记
- 不能只用10位数组存储,经过数次加法后大整数长度会增加很多
实现
#include <stdio.h>
#include <string.h>
struct bign {
int d[1000];
int len;
bign() {
memset(d, 0, sizeof(d));
len = 0;
}
};
bool isPalin(bign a) {
for (int i = 0; i < a.len / 2; i++) {
if (a.d[i] != a.d[a.len - i - 1]) {
return false;
}
}
return true;
}
bign change(char* str) {
bign a;
int len = strlen(str);
for (int i = 0; i < len; i++) {
a.d[len - i - 1] = str[i] - '0';
}
a.len = len;
return a;
}
bign Readd(bign a) {
bign c;
int carry = 0;
for (int i = 0; i < a.len; i++) {
int temp = a.d[i] + a.d[a.len - i - 1] + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
if (carry) {
c.d[c.len++] = carry;
}
return c;
}
int main() {
int stepMax, step = 0;
char str[1000];
scanf("%s%d", str, &stepMax);
bign a = change(str);
while (step < stepMax && !isPalin(a)) {
a = Readd(a);
step++;
if (isPalin(a)) {
break;
}
}
for (int i = a.len - 1; i >= 0; i--) {
printf("%d", a.d[i]);
}
printf("\n%d\n", step);
return 0;
}