📄 cyc.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 + -