蓝桥杯VIP试题回文数,恳求各位大佬看看是哪里错了
输入2
10011
答案输出4但是我的输出2
/*
算法训练 回文数
思路:
使用数组解决,定义两个数组一个是正序数组另一个是倒序数组
*/
#include <iostream>
#include <iomanip>
#include <climits>
#include <algorithm>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <math.h>
using namespace std;
int main() {
int n;
cin >> n;
int number = 0;
int a[10010], b[10010];//两种序列的数组
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
int cnt = 0;
if (n == 16) {
char m[10];
cin >> m;
int count = 0;
for (int i = 0; i < 10; i++) {
if (m[i] == '\0')
break;
count++;
}
for (int i = count - 1, j = 0; i >= 0; i--, j++) {
if (m[i] >= '0' && m[i] <= '9') {
number += (m[i] - '0') * pow(n, j);
}
else {
number += (m[i] - 'A' + 10) * pow(n, j);
}
}
}
else {
int m;
cin >> m;
for (int i = 0; m > 0; i++) {
int temp = m % 10;
number += temp * pow(n, i);
m /= 10;
}
}
for (int i = 0; number > 0; i++) {
b[i] = number % 10;
cnt++;
number /= 10;
}
for (int k = 1; k <= 30; k++) {
for (int i = 0; i < cnt; i++)
a[i] = b[i];
reverse(a, a + cnt);
/*while (a[0] == 0) {
for (int i = 0; i < cnt; i++)
a[i] = a[i + 1];
}*/
int temp = 0;
for (int i = 0; i < cnt; i++) {
b[i] += a[i];
if (b[i] >= 10) {
if (i == cnt - 1)
temp = 1;
b[i] = b[i] % 10;//取余数当做这个位置的数字
b[i + 1]++;//后面一个数字加1然后下一次直接运算
}
}
if (temp == 1)
cnt++;
for (int i = 0; i < cnt / 2; i++) {
if (b[i] != b[cnt - i - 1])
break;
if (i == cnt / 2 - 1) {
cout << "STEP=" << k << endl;
return 0;
}
}
}
cout << "Impossible!";
return 0;
}