扇子卡通简笔画:用VB做10000的价乘怎么算?

来源:百度文库 编辑:神马品牌网 时间:2024/05/01 12:41:31
我做了,可是老是有益出?不知道哪位可以帮到我?谢谢!!!

用一个整型数组存放运算结果(被乘数),初始为1;
1到10000分别做乘数,与该数组相乘,注意从低位开始,要维持逢十进一的十进制原则,最后就可以得到10000!了。
注意:这个运算比较耗时,结果位数小于40000位,可以定义数组长度为40000即可,进行乘法次数估计在1亿次左右,要耐心等待。
下面是一个delphi程序,算10000!大概用了24秒,你可以参考:
program large_fact;
{$APPTYPE CONSOLE}
uses
SysUtils;

const
max_n = 10000;
max_m = 4;
type
arrtype = array[0..max_m*max_n] of integer;
var
i,j,n,fact_len,up_value: integer;
fact: arrtype;
tb,te: TDateTime;
begin
tb := time;
if (paramcount < 1)
then
begin writeln('Usage: large_fact <n>'); exit end;
n := strtointdef(paramstr(1), 0);
if (n < 0)
then
begin writeln(n,' < ',0); exit end;
if (n > max_n)
then
begin writeln(n,' > ',max_n); exit end;

fact_len := 1;
fact[0] := 1;

for i := 2 to n
do
begin
up_value := 0;
for j := 0 to fact_len-1
do
begin
fact[j] := fact[j]*i + up_value;
up_value := fact[j] div 10;
fact[j] := fact[j] mod 10;
end;
while (up_value > 0)
do
begin
fact[fact_len] := up_value mod 10;
inc(fact_len);
up_value := up_value div 10;
end;
end;

for i := fact_len-1 downto 0
do
write(fact[i]);
writeln;

te := time;
writeln('用时',round((te-tb)*24*60*60*1000),'毫秒');
end.

笨思路 用大于20000的数组存结果每位数
然后
算得一位存一位
再根据已经存的数位计算下一位

不过这方法肯定超级慢了

你得自己设计一个数据结构
实现这个数据结构的+和*运算
来模拟计算
vb实现起来比较困难
c 比较简单
我们c语言实习时有这么一道题

兄弟,如果你悬赏200分,我给你代码!

你定义的变量定义的不对,DOUBLE行最大才是21亿

数据类型用long int