c语言计算 精度10万位,用C语言编写程序实现大整数(精度数十位到几万位)的四则运算(加、减、乘、除)。...

满意答案

00e27ab806e4881f8254fe7ae8741834.png

enreve

2013.06.03

00e27ab806e4881f8254fe7ae8741834.png

采纳率: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分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值