m0_46384299 2020-04-11 14:59
浏览 142

蓝桥杯回文数求助,我感觉自己的没错,但是OJ判断我是错的

蓝桥杯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;

}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 MddBootstrapInitialize2失败
    • ¥15 LCD Flicker
    • ¥15 Spring MVC项目,访问不到相应的控制器方法
    • ¥15 esp32在micropython环境下使用ssl/tls连接mqtt服务器出现以下报错Connected on 192.168.154.223发生意外错误: 5无法连接到 MQTT 代理,如何解决?
    • ¥15 关于#genesiscsheel#的问题,如何解决?
    • ¥15 Android aidl for hal
    • ¥15 STM32CubeIDE下载程序报错
    • ¥15 微信好友如何转变为会员系统?(相关搜索:小程序)
    • ¥15 c# 直接使用c++ 类库文件
    • ¥15 一个主机电脑有两个显示器,当前有两个软件主体是网页html打包的exe程序,如何通过cmd命令bat同时打开软件一个在主屏幕显示,另外一个软件在2副屏幕上显示