Exponentiation |
Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems.
This problem requires that you write a program to compute the exact value ofRn where R is a real number (0.0 < R < 99.999) and n is an integer such that .
Input
The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.Output
The output will consist of one line for each line of input giving the exact value of R n. Leading zeros and insignificant trailing zeros should be suppressed in the output.Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
Miguel A. Revilla
2000-02-09
#include <stdio.h>
#include <string.h>
void multiply (char n[],char s[],char m[])
{
int i=0,j=0,l,k,p1,p2,len1,len2,r[600];
memset(r,0,sizeof(int)*600);
len1=strlen(n);
len2=strlen(s);
while(n[i]!='.')i++;
p1=len1-i-1;
while(s[j]!='.')j++;
p2=len2-j-1;
for(i=len1-1,l=len1-1;i>=0;i--)
if(n[i]!='.')
for(j=len2-1,k=599-(len1-1-l--);j>=0;j--)
if(s[j]!='.')
r[k--]+=(n[i]-48)*(s[j]-48);
for(i=599;i>=0;i--)
if(r[i]>9)
{
r[i-1]+=r[i]/10;
r[i]%=10;
}
k=0;
memset(m,0,sizeof(char)*600);
while(r[k]==0&&k<=598&&k<600-p1-p2)k++;
m[600-k-p1-p2]='.';
for(i=k,j=0;i<=599;j++)
if(m[j]!='.')
m[j]=r[i++]+48;
k=strlen(m)-1;
while(m[k]=='0')k--;
m[++k]='\0';
}
int main()
{
int n;
char s[600],m[600];
while(scanf("%s %d",s,&n)!=EOF)
{
memset(m,0,sizeof(char)*600);
m[0]='1';
m[1]='.';
m[2]='0';
while(n--)
{
multiply(m,s,m);
}
if(m[strlen(m)-1]=='.')
m[strlen(m)-1]='\0';
printf("%s\n",m);
}
return 0;
}