再问一遍,昨天的红名大佬改不好。全WA
查看原帖
再问一遍,昨天的红名大佬改不好。全WA
327281
Phigros_Guest楼主2023/8/31 19:27

@xiazha 这位仁兄没解决

#include<bits/stdc++.h>
using namespace std;
int n,len,ans;
char m[101];
int m1[131],m2[131],m3[131];
bool pd()//回文数判断
{
    for(int i=1;i<=len/2;i++) if(m1[i]!=m1[len-i+1]) return false;
    return true;
}
void hplus()//高精度加法
{
    for(int i=1;i<=len;i++) m2[i]=m1[len-i+1];//倒转加数
    for(int i=1;i<=len;i++)
	{
		m3[i]=m1[i]+m2[i];
		if(m3[i]>=n) m3[i+1]++,m3[i]-=n;//处理进位
	}
	if(m3[len+1]) len++;
	for(int i=1;i<=len;i++) m1[i]=m3[i];//把和覆盖到下一个加数
    return;
}
int main()
{
    cin>>n>>m;//输入
    len=strlen(m);//求位数
    for(int i=1;i<=len;i++)//将ASCII码化成数
	{
		if(m[i]>='0'&&m[i]<='9') m1[len-i+1]=m[i]-'0';
		else m1[len-i+1]=m[i]-'A'+10;
	}
	while(!pd())//不回文就一直循环
	{
		ans++;
		if(ans>30)//超30步直接结束
		{
		    cout<<"Impossible!"<<endl;
		    return 0;
		}
		hplus();
	}
	cout<<"STEP="<<ans;//输出
    return 0;
}
2023/8/31 19:27
加载中...