北大ACM(POJ1001-Exponentiation)

时间:2023-03-10 03:12:39
北大ACM(POJ1001-Exponentiation)
Question:http://poj.org/problem?id=1001
问题点:大数运算(求幂)
 #include <iostream>
using namespace std;
#define max 1000
char a[max];
char b[max];
char c[max];
int main()
{
memset(a,,*sizeof(char));
memset(b,,*sizeof(char));
memset(c,,*sizeof(char));
char *R=(char *)malloc(*sizeof(char));
int n,point;
while(cin>>R>>n)
{
for(int i=,j=;i>=;i--,j++)
{
if(R[i]=='.')
{
point=-i;
j--;
continue;
}
a[j]=R[i];
b[j]=R[i];
} if(n==)
{
strcpy(c,a);
}
else
{
for(int k=;k<n;k++)
{
int alen=strlen(a);
int blen=strlen(b);
int m,n;
int jw=;
for(m=;m<alen+blen;m++)
{
int temp=;
for(n=((m-blen+)>?(m-blen+):);n<alen&&m-n<blen&&m-n>=;n++)
{
temp+=(a[n]-'')*(b[m-n]-'');
}
temp+=jw;
jw=temp/;
temp%=;
c[m]=temp+'';
}
strcpy(a,c);
}
}
int slen=strlen(c);
int q;
for(q=strlen(c)-;c[q]==''&&q>=point*n;q--)
{
c[q]=;
}
for(q=;c[q]==''&&q<point*n;q++)
{
}
for(int p=strlen(c)-;p>=q;p--)
{
if(p==point*n-)
{
cout<<".";
}
cout<<c[p];
}
memset(a,,*sizeof(char));
memset(b,,*sizeof(char));
memset(c,,*sizeof(char));
cout<<endl;
}
return ;
}