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

📄 cyc.cpp

📁 给定一个k进制数a
💻 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 + -