4871039_ac_0ms_292k.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 105 行

CPP
105
字号
#include<iostream>
#include<string>
using namespace std;
struct lei
{
	int x[12];
};
lei cyn(lei a)
{
	int i;
	for(i=10;i>0;i--) a.x[i]=a.x[i-1];
	a.x[0]=0;
	return a;
}
lei cy(lei a,int k)
{
	int i;
	for(i=10;i>=0;i--) a.x[i]*=k;
	return a;
}
lei add(lei a,lei b)
{
	int i;
	for(i=10;i>=0;i--) a.x[i]+=b.x[i];
	return a;
}
lei getit()
{
	string temp;
	lei now;
	int i;
	for(i=0;i<=11;i++)now.x[i]=0;
	while(1)
	{
		cin>>temp;
		if(temp=="BEGIN")cin>>temp;
		if(temp=="END") 
		{
			return now;
		}
		else if(temp=="OP")
		{
			int k;cin>>k;
			now.x[0]+=k;
		}
		else if(temp=="LOOP")
		{
			cin>>temp;
			if(temp[0]=='n')
			{
				lei ttt=cyn(getit());
				now=add(now,ttt);
			}
			else
			{
				int t=0,j=0;
				while(temp[j]) {t*=10;t+=temp[j]-'0';j++;}
				lei ttt=cy(getit(),t);
				now=add(now,ttt);
			}
		}
	}
}
void print(lei re)
{
	int i;
	bool first=true;
	for(i=10;i>=0;i--)
	{
		if(re.x[i]!=0) 
		{
			if(!first)cout<<"+";
			else first=false;
			if(i>0) 
			{
				if(i!=1)
				{
					if(re.x[i]!=1)printf("%d*n^%d",re.x[i],i);
					else printf("n^%d",i);
				}
				else 
				{
					if(re.x[i]!=1)printf("%d*n",re.x[i]);
					else printf("n");
				}
			}
			else printf("%d",re.x[i]);
		}
	}
	if(first==true) cout<<0;
	cout<<endl;
}
int main()
{
	int testnumber;
	cin>>testnumber;
	for(int count=0;count<testnumber;count++)
	{
		lei re=getit();
		cout<<"Program #"<<count+1<<"\nRuntime = ";
		print(re);
		cout<<endl;
	}
	return 0;
} 

⌨️ 快捷键说明

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