蒟蒻求助,有详细注释,没看出哪里错了qwq
查看原帖
蒟蒻求助,有详细注释,没看出哪里错了qwq
547513
daonan楼主2022/1/22 16:26
#include<bits/stdc++.h>
#define maxn 201
using namespace std;
int a[maxn],b[maxn],c[maxn];  //a:原数字,b:颠倒后数字,c:加起来
int main()
{   int n;
	string ass;        
	cin>>n;        //输入进制
	cin>>ass;      //输入原字符串
	int len=ass.length();
   	    for(int i=len-1,j=1;j<=len,i>=0;i--,j++)
	    {
	     a[j]=ass[i]-'0';
	     b[i+1]=ass[i]-'0';  //把原字符串改成int数组表示
	    }
	    int flag=0;          //用于计数step
	    int flags=0;         //用于判断是否形成回文
	 int max=40;
	 while (max--)          //30次循环
	 {
        flag++;	            //开始一次操作,step+1
	    for(int i=1;i<=len;i++) //c=a+b
	    {
	    	c[i]+=a[i]+b[i];
	    	c[i+1]=c[i]/n;      //进位
	    	c[i]%=n;       
		}
		if(c[len+1]) len++;     //最高位进位后总位数+1
		if(len%2)               //位数为奇数时
		{
			for(int i=1,j=len;i<=len/2,j>=(len/2)+2;i++,j--)
			{
				if(c[i]==c[j]) flags++;  //两侧开始判断是否为回文
			}
		}
	    else                    //位数为偶数
	    {
	    	for(int i=1,j=len;i<=len/2,j>=(len/2)+1;i++,j--)
	    	{
	    		if(c[i]==c[j]) flags++;
			}
		}
		if(flags==len/2)       //如果是回文
		{
			cout<<"STEP="<<flag;
			return 0;
		}
		if(flag>30) break;     //30次后没操作出来
		for(int i=1,j=len;i<=len,j>=1;i++,j--) //用c替换a,颠倒后得到b,供给下次操作
		{
			a[i]=c[i];
			b[j]=c[i];
		}
	}
	cout<<"Impossible!"	;     //没操作出来的结果
	return 0;
}
2022/1/22 16:26
加载中...