poj 1001 求高精度幂
2015-01-26 21:41
267 查看
http://poj.org/problem?id=1001
加memset(a,0,sizeof(a));和memset(b,0,sizeof(b));会MLE。。
4088K 282MS
加memset(a,0,sizeof(a));和memset(b,0,sizeof(b));会MLE。。
4088K 282MS
#include <iostream> #include <string.h> using namespace std; int n,a[1000000],b[1000000],c[1000000]; int dot,l,r,lena,lenb,lens; char s[10]; void mul(){ //高精度乘法 int i,j; memset(c,0,sizeof(c)); for(j=0;j<lenb;j++){ for(i=0;i<lena;i++){ c[i+j]+=a[i]*b[j]; c[i+j+1]+=c[i+j]/10; /// c[i+j]%=10; } } lena+=lenb; for(i=lena-1;i>=0;i--){ if(c[i]){ lena=i+1; for(;i>=0;i--){a[i]=c[i];} break; } } } int main(){ int i,j; while(scanf("%s %d",s,&n)!=EOF){ dot=-1; lens=lena=lenb=strlen(s); for(i=lens-1,j=0;i>=0;i--){ //string->int数组 if(s[i]!='.'){ a[j]=b[j]=s[i]-'0'; j++; } else dot=j; } if(dot!=-1){ //整数 lena=lenb=lens-1; dot*=n; //小数部分长度 } for(i=0;i<n-1;i++) mul(); //n次相乘 if(dot==-1){ for(i=lena-1;i>=0;i--) printf("%d",a[i]); } else{ l=0; for(i=0;i<lena;i++){ if(a[i]!=0){ r=i; break; } } if(dot>=lena){ printf("."); for(i=dot-lena;i>0;i--) printf("0"); for(i=lena-1;i>=r;i--) printf("%d",a[i]); } else{ for(i=lena-1;i>dot-1;i--) printf("%d",a[i]); if(i>=r)printf("."); for(;i>=r;i--) printf("%d",a[i]); } } putchar(10); } return 0; }
相关文章推荐
- poj 1001 Exponentiation(高精度运算)
- POJ-1001 求高精度幂
- POJ 1001 高精度实数相乘与快速幂
- poj 1001 浮点数高精度求幂
- poj1001 + 高精度的心得
- poj 1001 Exponentiation 高精度乘法
- POJ1001 Exponentiation 高精度
- hdu_1063,poj_1001_Exponentiation(大数,高精度) nyoj_155_求高精度幂
- POJ 1001-Exponentiation(NYOJ 155 求高精度幂):大数问题
- poj 1001 Exponentiation(高精度运算)
- POJ 1001 Exponentiation【高精度用java】
- poj1001(高精度【乘法】)
- POJ1001 Exponentiation--浮点数的高精度乘法
- POJ 1001 求高精度幂
- poj 1001 Exponentiation 高精度乘方
- poj 1001(高精度)
- POJ 1001:Exponentiation —— 高精度浮点数运算
- POJ 1001(浮点数高精度幂) 解题报告
- POJ——1001 求高精度幂
- POJ 1001 解题报告 高精度大整数乘法模版