第一次做高精度浮點數,着實費了番腦筋,不過終于AC了;
對于高精度運算還有一種分治方法能較少計算量,先留着連結
http://hi.baidu.com/foying/blog/item/3e00f6f87e214d08d9f9fddd.html
下面是參考别人後寫的代碼:
哎,寫代碼真是慢啊,給自己加油!希望有一天能成為學校那些厲害的ACMer中的一員!
#include"stdio.h"
int i,j,k,result[155],len=5;
int fpoint(char *s,int *r)
{
for(j=4,i=0;s[i]!='\0';i++)
if(s[i]!='.')r[j--]=s[i]-'0';
j=0;
while(s[j]!='.'&&s[j]!='\0')
j++;
return 5-j;
}
void multi(int *r,int n)
{
int i,j;
while(n-->1)
{
int c[155]={0};
for(i=0;i<5;i++)
for(j=0;j<len;j++)
c[i+j]+=r[i]*result[j];
len=i+j;
for(i=0;i<len;i++)
{
result[i]=c[i]%10;
c[i+1]+=c[i]/10;
}
}
return;
}
main()
{
int n,pstion,r[5]={0};
char s[7];
while(scanf("%s%d",s,&n)!=EOF)
{
if(n==0)printf("1");
else
{
pstion=fpoint(s,r);
for(i=0;i<5;i++)
result[i]=r[i];
multi(r,n);
pstion=n*pstion;
for(i=len-1,j=0;result[i]==0&&i>pstion-1;i--)
j++;
for(i=0,k=0;result[i]==0&&i<pstion;i++)
k++;
for(i=len-1-j;i>pstion-1;i--)
printf("%d",result[i]);
if(k!=pstion)printf(".");
for(i=pstion-1;i>=k;i--)
printf("%d",result[i]);
len=5;
}
printf("\n");
}
return 0;
}