1 solutions

  • 0
    @ 2025-10-30 21:31:18

    高精回文数 emm……M在一百位以内,该上高精度了。

    虽然是N进制数,但本题不需要转

    因为:

    既然是N进制数

    请把高精加中的——%10改为%n

    请把高精加中的——/10改为/n

    其他运算方式不变

    这题需要会高精加,高精反转,高精判断回文数和数组存高精度。

    不会的同学可以参考一下代码

    让我们开始愉快的模拟吧(~ ̄▽ ̄)~……………… 代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,q[1000001],l,w[1000001],ans;
    string s;
    void x()
    {
    	int j=0;
    	for(int i=s.length()-1;i>=0;i--)
    	{
    		if(s[i]>='0'&&s[i]<='9')
    		{
    			q[++j]=s[i]-'0';
    		}
    		else
    		{
    			q[++j]=s[i]-'A'+10;
    		}
    	}
    }
    void m(int a[],int b[])
    {
    	for(int i=1;i<=l;i++)
    	{
    		a[i]+=b[i];
    		a[i+1]+=a[i]/n;
    		a[i]%=n;
    	}
    	if(a[l+1]>0)
    	{
    		l++;
    	}
    }
    bool f(int a[])
    {
    	int ln=l;
    	int i=1;
    	int j=l;
    	while(ln--)
    	{
    		if(ln<l/2)
    		{
    			break;
    		}
    		if(a[i]!=a[j])
    		{
    			return false;
    		}
    		i++;
    		j--;
    	}
    	return true;
    }
    void t(int a[])
    {
    	int j=0;
    	for(int i=l;i>=1;i--)
    	{
    		w[++j]=a[i];
    	}
    }
    int main()
    {
    	cin>>n>>s;
    	x();
    	l=s.length();
    	while(!f(q))
    	{
    		t(q),m(q,w),ans++;
    		if(ans>30)break;
    	}
    	if(ans>30)printf("Impossible!");
    	else cout<<ans;
    	return 0;
    }
    

    完美结束…………………………………

    • 1

    Information

    ID
    386
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    10
    Tags
    # Submissions
    2
    Accepted
    2
    Uploaded By