描述
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 of Rnwhere R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25.
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
#include<stdio.h>
#include<string.h>
#include<math.h>
#define p 7
#define len 120
int main(){
int mult(int*a,int*b);
int n,i,j,k,location,flag;
int an[len],bn[len];
char sz[p];
while(scanf("%s %d",sz,&n)==2){
memset(an,0,sizeof(an));
memset(bn,0,sizeof(bn));
an[0]=1;
location=-1;
for(i=0;i<p-1;i++){
if(sz[i]=='.'){
location=i;//memory the location of the dot
location=n*(p-2-i);//get the new location
for(j=i;j<p-1;j++)
sz[j]=sz[j+1];//remove the dot
sz[p-1]='\0';
}
}
for(i=0;i<strlen(sz);i++)
bn[i]=sz[strlen(sz)-1-i]-'0';
for(i=0;i<n;i++)
mult(an,bn);
if(location==-1){
flag=0;
for(i=len-1;i>=0;i--){
if(flag)printf("%d",an[i]);
else if(an[i]){
printf("%d",an[i]);
flag=1;
}
}
if(!flag)printf("0");
printf("\n");
}//整数情况
else//小数
{
for(i=0;;i++){
k=i;
if(an[i]!=0)break;
}
for(i=len-1;i>=k;i--){
if(an[i])break;
}
if(i<location){
printf(".");
for(i=location-1;i>=k;i--)printf("%d",an[i]);
printf("\n");
}
else{
if(k<location){
flag=0;
for(i=len-1;i>=k;i--){
if(flag){
printf("%d",an[i]);
if(i==location&&i!=k)printf(".");
}
else if(an[i]){
printf("%d",an[i]);
if(i==location&&i!=k)printf(".");
flag=1;
}
}
printf("\n");
}
else{
flag=0;
for(i=len-1;i>=location;i--){
if(flag){
printf("%d",an[i]);
}
else if(an[i]){
printf("%d",an[i]);
flag=1;
}
}
if(!flag)printf("0");
printf("\n");
}
}
}
}
}
int mult(int*a,int*b){
int i,j,k,l;
int c[len];
memset(c,0,sizeof(c));
for(i=0;i<len;i++){
k=0;
for(j=0;j<len-i;j++){
l=c[i+j]+a[j]*b[i]+k;
c[i+j]=l%10;
k=l/10;
}
}
for(i=0;i<len;i++)a[i]=c[i];
}