📄 cyc.cpp
字号:
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
class String
{
public:
String(char *s="");
String(const String& s);
~String() {delete[] str; delete[] pre;}
int length()const {return size-1;}
int get();
String& change(int *p,int n);
void get(int *p);
void display(){out<<str<<endl;}
private:
char *str;
int *pre;
int size;
};
String::String(char *s)
{
size=strlen(s)+1;
str=new char[size];
if(str==0) throw "error";
strcpy(str,s);
pre=new int[size];
if(pre==0) throw "error";
}
String::String(const String&s)
{
size=s.size;
str=new char[size];
if(str==0) throw "error";
strcpy(str,s.str);
pre=new int[size];
if(pre==0) throw "error";
}
int String::get()
{
char tmp[100000];
in>>tmp;
delete[] str;
size=strlen(tmp)+1;
str=new char[size];
if(str==0)
throw "error";
strcpy(str,tmp);
return size-1;
}
void String::get(int *p)
{
int i,j;
for(i=0,j=0;j<=size-2;i++,j++)
if(str[j]>='0'&&str[j]<='9')
p[i]=int(str[j]-48);
else
p[i]=int(str[j]-55);
}
String& String::change(int *p,int n)
{
int i;
delete[] str;
str=new char[n+1];
for(i=0;i<n;i++)
{
if(p[i]>=0&&p[i]<=9)
str[i]=char(p[i]+48);
else
str[i]=char(p[i]+55);
}
str[n]='\0';
return *this;
}
void add(int *p,int &m,int *c,int k)
{
int i,j,a=0;
for(j=m-1,i=0;j>=0 && i<m;j--,i++)
{
c[i]=p[i]+p[j]+a;
a=0;
if(c[i]>=k)
{
a=c[i]/k;
c[i]=c[i]%k;
}
}
if(a!=0)
{
c[i]=a;
m++;
}
}
bool match(int *p,int n)
{
int i,k;
for(i=0,k=n--/2;i<k;i++,n--)
if(p[i]!=p[n]) return false;
if(i==k) return true;
}
int main()
{
if(in.fail())
{
cout<<"the input.txt is not exist!";
exit(1);
}
String s,s1;
int n,g,k,*a,*c,m,count=0;
in>>k>>g;
if(k<=1||k>=17)
{
out<<"error!"<<endl<<"请重新输入数值!";
exit(1);
}
s.get();
n=s.length();
m=n+g+1;
a=new int[m];
c=new int[m];
s.get(a);
if(match(a,n))
{
out<<0<<endl;
s.display();
return 1;
}
do
{
if(count%2==0)
add(a,n,c,k);
else
add(c,n,a,k);
count++;
if(count>g)
break;
}
while(!match(a,n)&&!match(c,n));
if(count>g)
out<<"No solution!"<<endl;
else
{
out<<count<<endl;
if(count%2==0)
s1.change(a,n);
else
s1.change(c,n);
s1.display();
}
delete[] a;
delete[] c;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -