把先前的大数乘法做了一些修改和整合
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
void reverse_str(char *a,int size){
for(int i=0;i<size/2;++i){
char t=a[i];
a[i]=a[size-i-1];
a[size-i-1]=t;
}
}
void large_mul(char a[],char b[],char c[]){//修改了的大数乘法函数
char a_t[20000]={0};//用临时变量来运算,避免乘方运算时数据之间的相互影响
char b_t[20000]={0};
char c_t[40001]={0};
strcpy(a_t,a);
strcpy(b_t,b);
int a_len=strlen(a_t);
int b_len=strlen(b_t);
reverse_str(a_t,a_len);
reverse_str(b_t,b_len);
for(int i=0;i<b_len;++i){
for(int j=0;j<a_len;++j){
int k=i+j;
c_t[k]+=(a_t[j]-'0')*(b_t[i]-'0');
if(c_t[k]>9){
c_t[k+1]+=(c_t[k]/10);
c_t[k]=c_t[k]%10;
}
}
}
int j;
for(j=a_len+b_len;j>0;--j){
if(c_t[j]!=0){
break;
}
}
c_t[j+1]=0;
for(int i=j;i>=0;--i){
c_t[i]=c_t[i]+'0';
}
reverse_str(c_t,strlen(c_t));
strcpy(c,c_t);
}
void n_large_mul(char a[],int n,char c[]){
if(n==0){
strcpy(c,"1");
return;
}
if(n==1){
strcpy(c,a);
return;
}
large_mul(a,a,c);
for(int i=2;i<n;++i){
large_mul(a,c,c);
}
}
int main() {
char a[20000]={0};
char c[40001]={0};
cin>>a;
int n;
cin>>n;
n_large_mul(a,n,c);
cout<<c<<endl;
return 0;
}