南阳oj 155 高精度幂

来源:互联网 发布:淘宝充值平台进价表 编辑:程序博客网 时间:2024/04/25 18:15
求高精度幂Time Limit: 500MS Memory Limit: 10000KTotal Submissions: 161720 Accepted: 39326Description对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <= 25。InputT输入包括多组 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。Output对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。Sample Input95.123 120.4321 205.1234 156.7592 998.999 101.0100 12Sample Output548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.126825030131969720661201SourceEast Central North America 1988该oj上面测试数据有问题 可以直接在poj上面提交以下附上代码:```#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<stack>#include<math.h>using namespace std;int main(){ char s[30]; int n,i,j; while(~scanf("%s%d",s,&n)) { int k=0; int x=strlen(s); long long ans=0; int flag=0; for(int i=0; i<x; i++) if(s[i]!='0'&&s[i]!='.') flag=1; if(n==0) printf("1\n"); else { if(x==1&&s[0]!='.') { ans=(int)(s[0]-48); } else { ans=(int)(s[0]-48)*10; for(i=0; i<x; i++) { if(s[i]=='.') { k=x-i-1;// printf("k=%d\n",k); } else { if(i==0) continue; else if(i==x-1) { ans=ans+(s[i]-48); } else { ans=(ans+s[i]-48)*10; } } } } } int a[17000]; int b[17000]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); a[0]=1; for(i=0; i<n; i++) { int c=0; for(j=0; j<17000; j++) { int s=a[j]*ans+c; a[j]=s%10; c=s/10; } } int m=n*k; for(j=17000; j>=0; j--) if(a[j]) break; int k1=0,k2; for(i=j; i>=0; i--) {// printf("%d",a[i]); b[k1++]=a[i]; }// printf("\n"); for(i=0; i<=j; i++) { if(a[i]!=0) { k2=i;// printf("k2=%d\n",k2); break; } } if(k2==m) { for(i=0; i<k1-m; i++) printf("%d",b[i]); printf("\n"); } else if(k2>m) { for(i=0; i<k1-m; i++) printf("%d",b[i]); printf("\n"); } else { for(i=0; i<k1-m; i++) printf("%d",b[i]); printf("."); for(i=k1-m; i<k1-k2; i++) printf("%d",b[i]); printf("\n"); } memset(s,'0',sizeof(s)); } return 0;}```
0 0
原创粉丝点击