求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
作者
申酉和风
发布于
2016-10-23
许可协议