本文主要是介绍【百炼oj】1001: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 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 dotlocation=n*(p-2-i);//get the new locationfor(j=i;j<p-1;j++)sz[j]=sz[j+1];//remove the dotsz[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];
}
这篇关于【百炼oj】1001:Exponentiation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!