回 帖 发 新 帖 刷新版面

主题:[讨论]2个简单的问题

1.如何将数值型数据转换成字符型数据。(越简单越好)例如:将
1234567转换成‘1234567’。
2.对于阶乘函数,即使自变量较小,其函数值也会相当大。例如:
 10!=32628800
 25!=15511210043330985984000000
设计一个程序,当键入一个正整数N(1≤N≤100)时,输出N!的精确表示法。
[em1]
第一题10分。
第二题20分哦。。。。。。

回复列表 (共3个回复)

沙发

1、STR(a, n);(n: STRING)

板凳

若要求出100!的精确值,需要使用高精度,这样便可以求出

3 楼

2、
程序:
TYPE arr = ARRAY[1..1023] OF INTEGER;
FUNCTION gjdmult(x, y: STRING): STRING;
VAR
   a, b, s: arr;
   l, lx, ly, d, i, j, k, v: INTEGER; z, zz: STRING;
BEGIN
    lx := LENGTH(x); ly := LENGTH(y);
    FOR i:=1 TO lx + ly DO s[i] := 0;
    FOR i:=1 TO lx DO VAL(COPY(x, lx + 1 - i, 1), a[i], k);
    FOR i:=1 TO ly DO VAL(COPY(y, ly + 1 - i, 1), b[i], k);
    FOR i:=1 TO lx DO BEGIN
        FOR j:=1 TO ly DO BEGIN
            d := a[i] * b[j]; v := i + j - 1;
            s[v] := s[v] + d MOD 10;
            s[v + 1] := s[v + 1] + s[v] DIV 10 + d DIV 10;
            s[v] := s[v] MOD 10;
        END;
    END;
    IF s[lx + ly] = 0 THEN l := lx + ly - 1 ELSE l := lx + ly;
    z := '';
    FOR i:=l DOWNTO 1 DO BEGIN
        STR(s[i], zz);
        z := z + zz;
    END;
    gjdmult := z;
END;
VAR
   a, b, l: STRING; n: WORD; i: INTEGER;
BEGIN
    READLN(n); l := '1';
    FOR i:=2 TO n DO BEGIN
        a := l; STR(i, b);
        l := gjdmult(a, b);
    END;
    WRITELN(n, '!=', l);
END.

我来回复

您尚未登录,请登录后再回复。点此登录或注册