请您留下宝贵的建议吧:)
广西百色高中欢迎您!

| 网站首页 | 学校概况 | 软件下载 | 图片中心 | 雁过留声 | 视频资源 | 校长信箱 | 内 部 网 |
| 同 学 录 | 网络办公 | 教学课件 | 优秀教案 | 试卷下载 | 教学素材 | 教学论文 | 电子图书 |

 
您现在的位置: 广西百色高中校园网 >> 学校概况 >> 学生频道 >> 信息技术 >> 精典程序 >> 文章正文 用户登录 新用户注册
   
   

高精度阶乘          【字体:
高精度阶乘
作者:仔仔    文章来源:本站原创    点击数:    更新时间:2006-9-26

program jjzx;  {本程序最大限制为求N(N<999)的阶乘}
var
  a,b,c:array[1..1000] of integer; 
  i,j,l,m,k1,k2,x,y,z,w,n,t:integer;


  procedure chengfa;  {高精度乘法}
    begin
       for l:=1 to k1 do
         for m:=1 to k2 do
            begin
               x:=a[l]*b[m];  
               y:=x div 10;
               z:=x mod 10;
               w:=l+m-1;
               c[w]:=c[w]+z;  
               c[w+1]:=c[w+1]+y+c[w] div 10;
               c[w]:=c[w]mod 10
            end;
       k1:=k1+k2;  {位数为K1、K2的两数相乘最大只有K1+K2位}
       if c[k1]=0 then k1:=k1-1;  {如果最高位为0则位数减少一位}
       for t:=1 to k1 do a[t]:=c[t];  {把一次高精度相乘的结果放到A数组中,以便下次相乘}
       for t:=1 to k1 do c[t]:=0;     {同时把数组C清空,以便下次相乘,因为每调用此过程一次都是一次                                       全新的高精度乘法,所以数组C必须清空}
   end;

  procedure zhuanhuan;  {把I每一位分解开分别赋值给数组B的每一个元素}
     begin
       if i>=100 then
         begin
           k2:=3;
           b[3]:=i div 100;
           b[2]:=(i-b[3]*100) div 10;
           b[1]:=i-b[3]*100-b[2]*10
         end
       else
         if i>=10
           then
              begin
                k2:=2;
                b[2]:=i div 10;
                b[1]:=i-b[2]*10
              end
           else
               begin
                k2:=1;
                b[1]:=i
               end;
     end;

begin
  writeln('input:');
  readln(n);
  a[1]:=1;  {最后结果放在数组A中}
  k1:=1;
  for i:=2 to n do
    begin
      zhuanhuan;
      chengfa;
    end;
 writeln(n:2,'!= ');
 for i:=k1 downto 1 do write(a[i])
end.

文章录入:qinjun    责任编辑:qinjun 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
          最新热点       最新推荐       相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

       
     
     
     
    广西百色高中欢迎您!   网站地图 | 联系站长 | 友情链接 | 用户排行 | 版权申明 | 管理登录
    版权所有 Copyright© 2005-2010 广西百色高中 (桂ICP备05013955号)
    学校地址:广西百色市城乡路93号 电话号码:0776-2824142 传真:0776-2847293 邮政编码:533000
    站    长:覃钧  QQ:75331465            改版时间:2007年8月20日