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

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

精度的实现是需要用字符形数组和整形数组的配合来实现,下面的例子,是一道ACM试题,关于计算高精度的问题,是算a的b次方但如果a是整数的话,后面需要输入 a0空格b回车。可以计算21的5000次方 或者是20的9000次方

#include<stdioh>

#include<mathh>

int qq(int n)

{ int i, sum=1;

for(i=1;i<=n;i++)

sum=10sum;

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<k+m;i++)

a[i]=a[i+1];

h=i;

for(i=0;i<h;i++)

b[i]=a[i]-48;

for(i=0;i<h;i++)c=c10+b[i];

for(i=0;i<h/2;i++){ t=b[i];b[i]=b[h-1-i];b[h-1-i]=t;}

for(e=1;e<n;e++)

{

for(i=0;i<h;i++)b[i]=b[i]c;

for(j=0;j<h-1;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<mn)

{

printf("");

for(j=mn-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==mn)

{ for(j=0; ;j++)if(b[j]!=0)break;

printf("");

for(i=h-1;i>=j;i--)

printf("%d",b[i]);

}

if(h>mn)

{

for(j=0; ;j++)if(b[j]!=0)break;

if(j<mn-1&&b[h-1]==0)

{

printf("");

for(i=mn-1;i>=j;i--)printf("%d",b[i]);

}

if(j<=mn-1&&b[h-1]!=0)

{ for(i=h-1;i>=mn;i--)

printf("%d",b[i]);

printf("");

for(i=mn-1;i>=j;i--)printf("%d",b[i]);

}

if(j>=mn)

{

for(i=h-1;i>=mn;i--)

printf("%d",b[i]);

}

} printf("\n");

}

return 0;

}

我在网上找到了一个计算大数阶乘位数的算法,效率相当可观:

例如1000阶乘位数:

log10(1)+log10(2)+···+long10(1000)取整后加1

或者

log(N!)=lnN!/ln10

=(NlnN-N)/ln10

=25657

so

N!=10^25657

=10^710^2565

=501e2565

然后,计算大数阶乘,只能靠计算机,用高精度,程序如下:

var a:array[110000000]of longint;

  n,i,j,ans,mark:longint;

procedure findmark;

var i:longint;

begin

for i:=10000000 downto 1 do

if a[i]>0 then

begin

 mark:=i;

 exit;

end;

end;

begin   

a[1]:=1;

readln(n);

for i:=2 to n do

begin

ans:=0;

mark:=mark+5;

for j:=1 to mark+5 do

begin

 a[j]:=a[j]i+ans;

 ans:=a[j] div 10;

 a[j]:=a[j] mod 10;

end;

end;

findmark;

for i:=mark downto 1 do

write(a[i]);

writeln;                         

end

这里还附上一个可执行文件,输入n,可以输出n!

1.打开CodeBlocks,创建一个新的空白文件,定义头文件和主要功能,然后写程序的主体:

2.数百首先,定义所需的变量,将变量定义为浮点数,定义输入函数,定义x和y的计算变量,和c定义为变量选择计算方法。

使用switch语句,以c为选择变量,填写计算方法的选择,最学位后在主函数输入输出函数输出计算公式和结果完成程序编写:

3,运行编译后的查询,输入一个部门的计算来验证跟踪程序输出小数,程序运行正常。这就是用C语言写四则运算器的过程:

以上就是关于用C语言编写程序实现大整数(精度数十位到几万位)的四则运算(加、减、乘、除)。全部的内容,包括:用C语言编写程序实现大整数(精度数十位到几万位)的四则运算(加、减、乘、除)。、怎样计算大数阶乘 最好有程序。、怎么用C语言编写一个大整数的四则运算器,求解(急!!)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9817871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存