poj1001

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int main()
{
char a[8];
int n;
int ans[200],temp[8];

int pos; //小数点之前的位数

while(scanf("%s %d",a,&n)!=EOF)
{
pos=-1;
memset(ans,0,sizeof(ans));
int len=strlen(a);
reverse(a,a+len);
int k=0;
for(int i=0;i<len;i++){
if(a[i]=='.')
pos=i;
else
{
ans[k]=a[i]-'0';
temp[k]=ans[k];
k++;
}
}


if(pos!=-1){
pos=pos*n;
len=len-1;
}

n=n-1;
int rlen=len;
int temptoo[200];

while(n--)
{
memset(temptoo,0,sizeof(temptoo));

for(int i=0;i<rlen;i++){
for(int j=0;j<len;j++){
temptoo[i+j]+=ans[j]*temp[i];

if(temptoo[i+j]>=10)
temptoo[i+j+1]+=temptoo[i+j]/10;

temptoo[i+j]=temptoo[i+j]%10;
}
}

len+=5;

memset(ans,0,sizeof(ans));
for(int i=0;i<len;i++){
ans[i]=temptoo[i];
}


}




int diweiling=-1;
int gaoweiling=1;
for(int i=0;i<pos;i++){
if(ans[i]==0){
diweiling=i;
}
else
break;
}



for(int i=len;i>=0;i--){
if(gaoweiling&&ans[i]==0&&i>(pos-1)){
continue;
}
if(pos==-1){
printf("%d",ans[i]);
gaoweiling=0;
continue;
}
if(i+1==pos&&diweiling<i)
printf(".");
if((i<=(pos-1)&&(i>diweiling))||(i>pos-1)){
printf("%d",ans[i]);
gaoweiling=0;
}
}


puts("");
}
return 0;
}



你可能感兴趣的:(poj1001)