Saturday 21 March 2009

POJ ( acm.pku.edu.cn ) 1001





#include<stdio.h>
#include<string.h>
#define MAX 1024
void power(int *a, int base, int n)
{
int i,j,r=0;
memset(a, 0, sizeof(int)*MAX);
for(i=0,j=base;j&&i<MAX;++i,j/=10)
a[i]=j%10;
for(i=0; i<n-1; ++i){
j=0;
for (j=0; j<MAX; j++){
r+=a[j]*base;
a[j]=r%10;
r/=10;
}
}
}

int main() {
char s[MAX];
int a[MAX];
int n, i, base, len, k;
while(scanf("%s%d",&s,&n)!=EOF){
base = 0;
len = strlen(s);
for (i=0; i<len; i++){
if (s[i]=='.'){
k = 6-(i+1); //小数位数
continue;
}
base*=10;base+=s[i]-'0';
}
for (i=5; s[i]=='0'; --i,--k)
base/=10;
k = k*n;
power(a, base, n);
for (i=MAX-1; i>=0; --i)
if(a[i])
break;
if (k>i){
printf(".");
for (i=k-1; i>=0; --i)
printf("%d", a[i]);
}else{
for (;i>=k;--i)
printf("%d", a[i]);
if (k!=0)
printf(".");
for (;i>=0;i--)
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}

No comments:

Post a Comment