求N!的值 【问题描述】 用高精度方法,求N!的精确值(N以一般整数输入)。 【输入样例】ni.in 10 【输出样例】ni.out 3628800
var
a,b:array[1..255] of 0..9;
c:array[1..256] of 0..27;
n1,n2,all,s:string;
xa,xb,x,j,d:longint;
begin
assign(f1,'ni.in')
read(f1,all);
s:='1';
for //条件 小于文本中值
xa:=length(n1);
for x:=1 to xa do a[xa-x+1]:=ord(n[x])-ord('0');
//n2为顺序数
xb:=length(n2);
for x:=1 to xb do b[xb-x+1]:=ord(n[x])-ord('0');
x:=1;
while (x<=xa)or(x<=xb) do
begin
c[x]:=a[x]+b[x]+c[x];
if c[x]>=10 then
begin
c[x+1]:=1;
c[x]:=c[x] mod 10
end;
x:=x+1;
end;
while c[x]=0 do x:=x-1;
for d:=1 to xa do a[d]:=0;
d:=1;
while x >=1 do
begin
n1[d]=c[x];
x:=x-1;
d:=d+1;
end;
end.
高精度加法
//n.1.addition
var
a,b:array[1..255] of 0..9;
c:array[1..256] of 0..27;
n:string;
xa,xb,x,j:longint;
begin
write('Addend : ');
readln(n);
xa:=length(n);
for x:=1 to xa do a[xa-x+1]:=ord(n[x])-ord('0');
write('Augend : ');
readln(n);
xb:=length(n);
for x:=1 to xb do b[xb-x+1]:=ord(n[x])-ord('0');
x:=1;
while (x<=xa)or(x<=xb) do
begin
c[x]:=a[x]+b[x]+c[x];
if c[x]>=10 then
begin
c[x+1]:=1;
c[x]:=c[x] mod 10
end;
x:=x+1;
end;
while c[x]=0 do x:=x-1;
while x >=1 do
begin
write(c[x]);
x:=x-1;
end;
readln;
end.
高精度乘法
//n.1.multiplication
var
a,b:array[1..255] of 0..9;
c:array[1..256] of 0..99;
n:string;
xa,xb,x,j,d:longint;
begin
write('Multiplier: ');
readln(n);
xa:=length(n);
for x:=1 to xa do a[xa-x+1]:=ord(n[x])-ord('0');
write('Multiplicand : ');
readln(n);
xb:=length(n);
for x:=1 to xb do b[xb-x+1]:=ord(n[x])-ord('0');
//Start!
for x:=1 to xb do
begin
for j:=1 to xa do
begin
c[x+j-1]:=a[j]*b[x]+c[x+j-1];
if c[x+j-1]>=10 then
begin
c[x+j]:=c[x+j]+(c[x+j-1] div 10);
c[x+j-1]:=c[x+j-1] mod 10;
end;
end;
end;
d:=x+j;
if c[d]=0 then d:=d-1;
while d>=1 do
begin
write(c[d]);
d:=d-1;
end;
readln;
end.
Pascal:高精度算法,习题
https://Mundnaity.moe/post/pascal_chap_A1_ex