【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
使用
n的m次方
#include<stdio.h>
#include<string.h>
int main()
{
float a;
long long i,j,m,b,p,sl,str[15],res[200],rl,t,d,tem,bak[200],bl;
char num[100],rs[1000];
while(~scanf("%s%lld",num,&b))
{
sl=i=0;
m=strlen(num)-1;
p=-1;
memset(res,0,800);
memset(rs,0,1000);
for(i=0; i<m; i++)
{
if(num[i]!=48)
break;
}
while(m>i)
{
if(num[m]!=48)
break;
m--;
}
for(; m>=i; m--)
{
if(num[m]=='.')
{
p=sl;
}
else
{
str[sl++]=num[m]-48;
}
}
while(sl>1&&str[sl-1]==0)sl--;
rl = sl;
d=0;
for(i=sl-1; i>=0; i--)
d=d*10+str[i];
sl=res[0]=1;
for(j=0; j<b; j++)
{
if((tem=d/1000000)>0)
{
memset(bak,0,200*4);
for(t=0,i=0;i<sl;i++){
t+=tem*res[i];
bak[i+1]=t%1000000;
t/=1000000;
}
bl=sl+1;
if(t>0){
bak[bl++]=t;
}
}
tem = d%1000000;
for(t=i=0; i<sl; i++)
{
t+=tem*res[i];
res[i]=t%1000000;
t/=1000000;
}
if(t>0)res[sl++]=t;
if(d/1000000){
for(t=i=0;i<bl;i++){
t+=bak[i]+res[i];
res[i]=t%1000000;
t/=1000000;
}
sl=bl;
if(t)
res[sl++]=t;
}
}
for(i=sl-1; i>=0; i--)
{
sprintf(rs,i==sl-1?"%s%lld":"%s%06lld",rs,res[i]);
}
if(p>0)
{
m=strlen(rs);
if(m<=b*p)
{
printf(m<b*p?".":"");
for(i=0; i<b*p-m; i++)
printf("0");
printf("%s\n",rs);
}
else
{
for(i=0; i<m; i++)
{
printf(i==m-b*p?".%c":"%c",rs[i]);
}
printf("\n");
}
}
else
{
printf("%s\n",rs);
}
}
return 0;
}
来源:oschina
链接:https://my.oschina.net/u/3695598/blog/3142968