社区讨论

c++求大佬帮忙

P1015[NOIP 1999 普及组] 回文数参与者 2已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lodskhzw
此快照首次捕获于
2023/10/31 11:51
2 年前
此快照最后确认于
2023/11/02 10:34
2 年前
查看原帖
CPP
求大佬帮下忙,输入参考输出的是impossible
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
#define maxlen 2500
#define rmaxlen 3000
string add_s1, add_s2;
//高精加法
int add_a[maxlen], add_b[maxlen], add_c[rmaxlen];
string func_add(string add_s1, string add_s2,int n)
{
    //a重置为0,长度重置为maxlen和rmaxlen 
    memset(add_a, 0, sizeof(int) * maxlen);
    memset(add_b, 0, sizeof(int) * maxlen);
    memset(add_c, 0, sizeof(int) * rmaxlen);

    int len = add_s1.length();
    //逆序存放
    for (int i = 0; i < len; i++)
    {
        add_a[len - 1 - i] = add_s1[i] - '0';
    }
    len = add_s2.length();
    for (int i = 0; i < len; i++)
    {
        add_b[len - 1 - i] = add_s2[i] - '0';
    }
//判断哪个len大
    if (add_s1.length() > len)
    {
        len = add_s1.length();
    }
    //相加
    for (int i = 0; i < len; i++)
    {
        add_c[i] += add_a[i] + add_b[i];
        //到n进位
        if (add_c[i] >= n)
        {
            add_c[i + 1] += add_c[i] / n;
            add_c[i] %= n;
        }
    }

//增长
    if (add_c[len] > 0)
    {
        len++;
    }
    string add_ans;
    for (int i = len - 1; i >= 0; i--)
    {
        add_ans += add_c[i] + '0';
    }
    return add_ans;
}
//倒过来
string change(string t)
{
   
    int len = t.length();
    string ans;
    for (int i = len - 1; i >= 0; i--)
    {
        ans += t[i] + '0';
    }

    return ans;
}
//判断是否是回文数
bool isPalindromes(string t) 
{
    int len = t.length();
    int i = 0;//从两边判断
    int j = len - 1;
    while (len--)
    {
        if (len / 2 < i)
        {
            break;
        }
        if (t[i] != t[j])
        {
            return false; 
        }
        i++;
        j--;
    }
    return true;
}


int main()
{
    string t;
    int n;
    int i = 0;
    //n进制 t是数字
    cin >> n >> t;
    while (!isPalindromes(t))
    {
        string b = change(t);
        if (!isPalindromes(t)) 
        {
            i++;
            t = func_add(t,b,n);
            if (i > 30)
            {
                break;
            }
        }
        else
        {
            break;
        }

    }
    if (i >= 30)
    {
        cout << "Impossible!" << endl;
    }
    else
    {
        cout << "STEP=" << i << endl;
    }

    return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...