⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cyc.cpp

📁 回文问题 也是高校作业比较常出的 有点用的哦
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>
ifstream fin("input.txt");
ofstream fout("output.txt");
#define NUM 45678           //随便开的空间大小
class CYC
{
  private:
	char Q[NUM]; 
	char A[NUM];
	char B[NUM];
    int k,n;
  public: 
	 CYC()                     
	 {    
		
		 for(int l=0;l<NUM;l++)
		 {A[l]='$';B[l]=NULL;}          //用‘$’来作数字截止标记
		 int r=0;
		 fin>>k>>n;
		fin>>Q;
		for(int y=0;Q[y]!=NULL;y++)
			r++;
		for(y=0;y<r;y++)
			A[NUM-r+y]=Q[y];            //将数字置于串数组尾部
	 }
	 bool check()                  //检验是否为回文数       
	 {
       int i,j=0;
	   for(i=NUM-1;A[i]!='$';i--) j++;
	   int d=j;
       if(j%2)
	   {
		 for(i=NUM-1;i>=(NUM-j/2);(i--&&d--))
		 {
			if(A[i]!=A[NUM-d]) return false;
		 }
		return true;
	   }
	    else 
		{
		    for(i=NUM-1;i>(NUM-j/2-1);(i--&&d--))
			{
		    	if(A[i]!=A[NUM-d]) return false;
			}
	         return true;
		}
	 }
    void changeturn()            //对数字进行倒置
	{
	  int i,j=0;
	  char tmp;
	  for(i=NUM-1;A[i]!='$';i--) j++; 
	  int d=j;
      if(j%2)
	  {
		for(i=NUM-1;i>=(NUM-j/2);(i--&&d--))
		{ 
			tmp=A[i];
		    A[i]=A[NUM-d];
			A[NUM-d]=tmp;
		}
	  }
	   else for(i=NUM-1;i>(NUM-j/2-1);(i--&&d--))
	   {    
			tmp=A[i];
		    A[i]=A[NUM-d];
			A[NUM-d]=tmp;
		}
	  
	}
	bool add()             //将A,B数组内的数相加,存于A数组中,并调用check()函数,测试是否为回文数      
	{   
		char t;
		int g,h,m;
		if(check()) {fout<<0<<endl;output(); return true;}
		for(m=1;m<=n;m++)        
		{
			  for(g=NUM-1;A[g]!='$';g--) B[g]=A[g]; 
			  changeturn();  
              for(h=NUM-1;A[h]!='$';h--)    
			  {
				  t=A[h-1];
				  if(A[h]>='A'&&B[h]>='A') //本题关键为进位处理,分3种情况处理
				  {
					  if((A[h]+B[h]-'0'-'0'-14)/k>0&&A[h-1]=='$') 
				        A[h-1]=char((A[h]+B[h]-'0'-'0'-14)/k+'0');
					  else if((A[h]+B[h]-'0'-'0'-14)/k>0&&A[h-1]!='$')
					  {
						  A[h-1]+=(A[h]+B[h]-'0'-'0'-14)/k;
					      if(A[h-1]>'9'&&t<'A') A[h-1]+=7;
					  } 
					  if(B[h]!=NULL)  A[h]=(A[h]+B[h]-'0'-'0'-14)%k+'0';
					  if(A[h]>'9') A[h]+=7;      
				  }
				  else if((A[h]>='A'&&B[h]<'A')||(A[h]<'A'&&B[h]>='A')) 
				  {
					  if((A[h]+B[h]-'0'-'0'-7)/k>0&&A[h-1]=='$') 
				         A[h-1]=char((A[h]+B[h]-'0'-'0'-7)/k+'0');
					  else if((A[h]+B[h]-'0'-'0'-7)/k>0&&A[h-1]!='$')
					  {
						 A[h-1]+=(A[h]+B[h]-'0'-'0'-7)/k; 
						 if(A[h-1]>'9'&&t<'A') A[h-1]+=7;
					  }
				  
					  if(B[h]!=NULL) A[h]=(A[h]+B[h]-'0'-'0'-7)%k+'0'; 
					  if(A[h]>'9') A[h]+=7;       
				  }
			 	  else if(A[h]<'A'&&B[h]<'A') 
				  {
					  if(((A[h]+B[h]-'0'-'0')/k)>0&&A[h-1]=='$') 
				        A[h-1]=char((A[h]+B[h]-'0'-'0')/k+'0');
			          else if(((A[h]+B[h]-'0'-'0')/k)>0&&A[h-1]!='$')
					  {
						  A[h-1]+=(A[h]+B[h]-'0'-'0')/k;
						  if(A[h-1]>'9'&&t<'A') A[h-1]+=7;
					  }
				      if(B[h]!=NULL)  A[h]=char((A[h]+B[h]-'0'-'0')%k+'0');
					  if(A[h]>'9') A[h]+=7;      
				  }
			  }                
		   if(check()) 
		   {
			   fout<<m<<endl;
			   output();
			   return true;
		   }
        }
		return false;
	}
	void output()       //输出函数
	{
		for(int q=0;q<NUM;q++)
		{
			if(A[q]!='$')
			{
				for(int z=q;z<NUM;z++)
				fout<<A[z];                
				fout<<endl;
				break;
			}
		}
	}
};

int main()
{ 
	CYC cyc;
	if(cyc.add())  return 0;
    fout<<"No solution!"<<endl;
	return 0;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -