?? 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 + -