描述求R的n次幂(0.0<r<99.999,0<n<=25)
输入
每行输入两个数R和n
R值占1-6列,n占8-9列
输出
对应于每一行输入,输出R的n次幂
前导的0不要输出
无意义的0不要输出
如果结果是一个整数,不要输出小数点
最后一行是空行样例输入
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
样例输出
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
题目来源
POJ
#include <stdio.h>
#include <string.h>
#define MAX 200
char Multiply[MAX];
void MultiplyAB(char A[],char B[])
{
int i,j,p,m=0,n=0,offset=0;
int T[MAX]={0};
for(j=strlen(B)-1;j>=0;--j)
{
if(B[j]!='.')
{
p=offset++;
for(i=strlen(A)-1;i>=0;--i)
{
if(A[i]!='.')
{
T[p]+=(B[j]-'0')*(A[i]-'0');
++p;
}
else
{
m=strlen(A)-1-i;
}
}
}
else
{
n=strlen(B)-1-j;
}
}
for(i=0;i<p;++i)
{
if(T[i]>=10)
{
T[i+1]=T[i+1]+T[i]/10;
T[i]%=10;
}
}
for(i=0;p>=0;--p,++i)
{
if(p!=m+n-1)
{
Multiply[i]=T[p]+'0';
}
else
{
Multiply[i]='.';
Multiply[++i]=T[p]+'0';
}
}
Multiply[i]='\0';
}
void Filter()
{
int dot=0,i=0;
while(i<strlen(Multiply))
{
if(Multiply[i++]=='.')
{
dot=1;
}
break;
}
if(dot==1)
{
i=strlen(Multiply)-1;
while(Multiply[i]=='0')
{
--i;
}
Multiply[i+1]='\0';
}
}
main()
{
char a[MAX];
unsigned int i,n;
while(scanf("%s %d",a,&n)==2)
{
Multiply[0]='1';
Multiply[1]='\0';
for(i=1;i<=n;++i)
{
MultiplyAB(Multiply,a);
}
Filter();
i=0;
while(Multiply[i]=='0')
{
++i;
}
while(i<strlen(Multiply))
{
printf("%c",Multiply[i]);
++i;
}
printf("\n");
}
printf("\n");
}
不能AC