m0_46384299 2020-04-11 14:59 采纳率: 0%
浏览 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;

}
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-25 15:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析:
    1. 输入格式问题:题目要求输入一个整数表示进制,而你的代码中有分支判断输入有两种情况,因此需要修改代码逻辑,使其只接受一个整数作为输入。
    2. 回文数判断问题:你的代码中对回文数的判断有误,回文数应该是指正序数和倒序数一样,而你的代码中进行了多次计算并将结果进行判断,这样会导致错误的结果。
    3. 输出问题:你的代码中对于回文数还需要输出步数,但是题目要求的是回文数的长度,这也是导致错误输出的原因。 修改建议和示例代码:
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    bool isPalindrome(int num, int base) {
        int original = num;
        int reversed = 0;
        while (num > 0) {
            reversed = reversed * base + num % base;
            num /= base;
        }
        return original == reversed;
    }
    int main() {
        int base;
        cin >> base;
        int num;
        cin >> num;
        if (isPalindrome(num, base)) {
            cout << "1" << endl;
        } else {
            int steps = 0;
            while (true) {
                int reversed = 0;
                int temp = num;
                while (temp > 0) {
                    reversed = reversed * base + temp % base;
                    temp /= base;
                }
                num += reversed;
                steps++;
                if (isPalindrome(num, base)) {
                    cout << steps + 1 << endl;
                    break;
                }
                if (steps > 30) {
                    cout << "Impossible!" << endl;
                    break;
                }
            }
        }
        return 0;
    }
    

    这样修改之后的代码应该可以正确地输出回文数的长度。

    评论

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格