主题:[讨论]2个简单的问题
lierenpascal
[专家分:0] 发布于 2007-08-03 15:42:00
1.如何将数值型数据转换成字符型数据。(越简单越好)例如:将
1234567转换成‘1234567’。
2.对于阶乘函数,即使自变量较小,其函数值也会相当大。例如:
10!=32628800
25!=15511210043330985984000000
设计一个程序,当键入一个正整数N(1≤N≤100)时,输出N!的精确表示法。
[em1]
第一题10分。
第二题20分哦。。。。。。
回复列表 (共3个回复)
沙发
Matodied [专家分:7560] 发布于 2007-08-03 19:32:00
1、STR(a, n);(n: STRING)
板凳
interegg [专家分:80] 发布于 2007-08-03 21:28:00
若要求出100!的精确值,需要使用高精度,这样便可以求出
3 楼
Matodied [专家分:7560] 发布于 2007-08-03 21:50:00
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.
我来回复