记录编号 180948 评测结果 AAAAAAAAAAAATA
题目名称 [暑假培训2012] 残酷的数学老师 最终得分 92
用户昵称 GravatarGaoErFu 是否通过 未通过
代码语言 C++ 运行时间 2.114 s
提交时间 2015-08-21 11:20:44 内存使用 0.34 MiB
显示代码纯文本
#include<stdio.h>
#include<math.h>
#include<string.h>
void stbn(char *c,int *d)
{
	int i,j,n;
	n=strlen(c);
	memset(d,0,sizeof(int)*15010);
	for(i=n,j=0;i>=1,j<n;i--,j++)
	d[i]=c[j]-48;
	d[0]=n;
}
void cheng(int *a,int *b,int *c)
{
	int i,j,k;
	memset(c,0,sizeof(int)*15010);
	for(i=1;i<=a[0];i++)
	for(j=1;j<=b[0];j++)
	{
		c[i+j-1]+=a[i]*b[j];
		c[i+j]+=c[i+j-1]/10;
		c[i+j-1]=c[i+j-1]%10;
	}
	k=a[0]+b[0];
	if(c[k]!=0)c[0]=k;
	else c[0]=k-1;
}
void canku(int *a,int *b,int *c,int P)
{
	while(P!=0)
	{
		if(P%2==1)
        {
		cheng(a,b,c);
	    memcpy(a,c,15010*4);
		}
		cheng(b,b,c);
		memcpy(b,c,15010*4);
		P=P/2;
	}
}
void print(int *a)
{
	int i,j;
	for(i=a[0],j=1;i>=1,j<=a[0];j++,i--)
	{printf("%d",a[i]);if(j>=70&&j%70==0)printf("\n");}
}
int main()
{   
	freopen("cruel1.in","r",stdin);
	freopen("cruel1.out","w",stdout);
	char N[50];
	int r[15010]={0},base[15010]={0},tmp[15010]={0},P;
	int i,j;
	scanf("%s%d",N,&P);
	r[1]=1;
	r[0]=1;
	stbn(N,base);
	canku(r,base,tmp,P);
	print(r);
	return 0;
}