想了一天的高精度n次方,样例会对,求大神帮忙看看错哪了
#include<iostream>#include<cmath>
#include<cstring>
using namespace std;
int main()
{
char A[100];
int n,i,j,k,flag,C[128],D[128],l,M[128],o,len,cnt,a,b,flag2,flag3,flag4;
for (;cin>>A>>n;){
if (n%2==0)
cnt=n;
else
cnt=n-1;
j=strlen(A);
flag=0;
flag2=0;
flag4=0;
memset(C,0,sizeof(C));
memset(M,0,sizeof(M));
memset(D,0,sizeof(D));
for (j=j-1;j>=0;j--)
if (A[j]!='0'&&A[j]!='.'){
flag3=j;
break;
}
for (i=0,l=0;i<=flag3;i++)
{
if (A[i]!='0'&&A[i]!='.')
flag2=1;
if (flag2){
if (A[i]==48){C[l]=0;l++;}
if (A[i]==49){C[l]=1;l++;}
if (A[i]==50){C[l]=2;l++;}
if (A[i]==51){C[l]=3;l++;}
if (A[i]==52){C[l]=4;l++;}
if (A[i]==53){C[l]=5;l++;}
if (A[i]==54){C[l]=6;l++;}
if (A[i]==55){C[l]=7;l++;}
if (A[i]==56){C[l]=8;l++;}
if (A[i]==57){C[l]=9;l++;}
}
if (A[i]=='.'){
flag=i;
flag4=1;
}
}
b=n*(flag3-flag);
for (k=0;k<l;k++)
D[k]=C[k];
len=l-1;
for (cnt=1;cnt<n;cnt++)
{
for (l=i-1,o=127;l>=0;l--,o--)
for (a=len;a>=0;a--){
M[o-(len-a)]+=C[l]*D[a];
if (M[o-(len-a)]>=10)
{
M[o-(len-a)-1]+=M[o-(len-a)]/10;
M[o-(len-a)]=M[o-(len-a)]%10;
}
}
for (o=0,l=0,flag=0;o<=127;o++)
{
if (M[o]!=0)
{
flag=1;
}
if (flag)
{
C[l]=M[o];
l++;
}
}
i=l;
memset(M,0,sizeof(M));
}
for (l;l>=0;l--)
if (C[l]!=0)
{
flag=l;
break;
}
if (flag4){
if (b<=l)
{
a=l-b;
for (k=0;k<=flag;k++)
{
cout<<C[k];
if (k==a)
cout<<'.';
}
cout<<endl;
}
else
{
a=b-l;
cout<<'.';
for (k=0;k<a-1;k++)
cout<<'0';
for (k=0;k<=flag;k++)
cout<<C[k];
cout<<endl;
}
}
else
{
for (k=0;k<=flag;k++)
{
cout<<C[k];
}
cout<<endl;
}
}
return 0;
}
代码很麻烦,在此谢过各位大神了