满意答案
enreve
2013.06.03
采纳率:42% 等级:12
已帮助:4120人
精度的实现是需要用字符形数组和整形数组的配合来实现,下面的例子,是一道ACM试题,关于计算高精度的问题,是算a的b次方...但如果a是整数的话,后面需要输入 a.0空格b回车。可以计算2.1的5000次方 或者是2.0的9000次方
#include
#include
int qq(int n)
{ int i, sum=1;
for(i=1;i<=n;i++)
sum=10*sum;
return(sum);
}
int main()
{
float r;
int n;
while(1)
{
char a[10000];
long int b[10000];
int k,h,m,i,j,z,g,t,q,e;
long int c=0;
if(scanf("%s%d",a,&n)==EOF)break;
for(i=0;a[i];i++)
if(a[i]=='.')k=i;
m=i-k-1;
for(i=k;i
a[i]=a[i+1];
h=i;
for(i=0;i
b[i]=a[i]-48;
for(i=0;i
for(i=0;i
for(e=1;e
{
for(i=0;i
for(j=0;j
if(b[j]>=10){t=b[j];b[j]=t%10;b[j+1]+=t/10; }
if(b[h-1]>=10)
{
t=b[h-1];
q=b[h-1];
z=1;
while(t>=10)
{
t=t/10;
z++;
}
g=z;
while(z>=1)
{
b[h+g-z-1]=q/qq(g-z)%10;
z--;
}
h=h+g-1;
}
}
if(h
{
printf(".");
for(j=m*n-1;j>h-1;j--)printf("0");
for(j=0; ;j++)if(b[j]!=0)break;
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h==m*n)
{ for(j=0; ;j++)if(b[j]!=0)break;
printf(".");
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h>m*n)
{
for(j=0; ;j++)if(b[j]!=0)break;
if(j
{
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j<=m*n-1&&b[h-1]!=0)
{ for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j>=m*n)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
}
} printf("\n");
}
return 0;
}
02分享举报