记录编号 |
180948 |
评测结果 |
AAAAAAAAAAAATA |
题目名称 |
[暑假培训2012] 残酷的数学老师 |
最终得分 |
92 |
用户昵称 |
GaoErFu |
是否通过 |
未通过 |
代码语言 |
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;
}