精度的实现是需要用字符形数组和整形数组的配合来实现,下面的例子,是一道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语言编写一个大整数的四则运算器,求解(急!!)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)