POJ 1001 Exponentiation
2012-10-03 18:13
260 查看
测试数据没有问题,但是不知道为什么老得到Wrong Answer
#include <stdio.h> #include <string.h> #define MAXLEN 1000 struct decimal { int num[MAXLEN]; int len; int frac; }; void Product(decimal d1, decimal d2,decimal& d3) { int i,j; //i points to d1,j points to d2 memset(d3.num,0,sizeof(d3.num)); for(j=0;j<d2.len;j++) for(i=0;i<d1.len;i++) d3.num[i+j]+=d1.num[i]*d2.num[j]; for(i=0;i<d1.len+d2.len-1;i++) { d3.num[i+1]+=d3.num[i]/10; d3.num[i]=d3.num[i]%10; } //here i=d1.len+d2.len-1, the highest bit of d3 int sig=d1.len+d2.len-1; if(d3.num[sig]!=0) d3.len=sig+1; else d3.len=sig; //frac d3.frac=d1.frac+d2.frac; } void Reverse(char str[],int len) { char x[MAXLEN]; int i; for(i=0;i<len;i++) x[i]=str[len-1-i]; for(i=0;i<len;i++) str[i]=x[i]; } void Output(decimal& d3) { char str[MAXLEN]={0}; int i,j; for(i=0;i<d3.len && d3.num[i]==0;i++); //eliminate tail zero if(i==d3.len) { printf("0\n"); return; } for(j=0;i<d3.len;i++,j++) { str[j]=d3.num[i]+'0'; if(i==d3.frac-1) { j++; str[j]='.'; } } //highest bit of str is j-1, len is j; int len=j; //eliminate front zero for(i=len-1;i>=0 && str[i]=='0';i--,len--); Reverse(str,len); str[len]='\0'; printf("%s\n",str); } //string is ended by '\0' int CountFrac(char str[]) { int count=0; int i; int len=strlen(str); for(i=0;i<len;i++) if(str[i]=='.') return (len-i-1); return 0; } void str2dec(char str[], decimal& d) { int i,j; int len=strlen(str); d.frac=CountFrac(str); d.len=0; for(i=len-1,j=0;i>=0;i--) if(str[i]!='.') { d.num[j]=str[i]-'0'; d.len++; j++; } } int main() { decimal d1,d2,d3; char base[10]; int n; while(scanf("%s%d",base,&n)!=EOF) { d1.len=strlen(base); memset(d1.num,0,sizeof(d1.num)); memset(d3.num,0,sizeof(d3.num)); str2dec(base,d1); d3.frac=0; d3.len=1; d3.num[0]=1; for(int i=1;i<=n;i++) Product(d3,d1,d3); Output(d3); } }
相关文章推荐
- poj 1001 Exponentiation(高精度运算)
- poj 1001 Exponentiation 大数大数
- POJ 1001-Exponentiation(NYOJ 155 求高精度幂):大数问题
- poj 1001 Exponentiation
- POJ 1001 Exponentiation
- POJ 1001 Exponentiation解题报告
- POJ1001 Exponentiation 高精度
- POJ 1001 Exponentiation
- poj1001 Exponentiation(JAVA实现)
- poj-1001 Exponentiation
- POJ-1001 Exponentiation 高精度算法
- POJ 1001 Exponentiation 无限大数的指数乘法 题解
- poj 1001 Exponentiation(高精度运算)
- POJ 1001 Exponentiation(大数幂,还是Java大发好!需调用多个方法)
- poj 1001 Exponentiation
- POJ解题报告——1001 Exponentiation
- poj 1001 exponentiation
- POJ 1001 Exponentiation
- poj 1001 Exponentiation
- Hdu 1063 & Poj 1001 Exponentiation (java 高精度实数 去除首尾0)