免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2186 | 回复: 2
打印 上一主题 下一主题

POJ1001、次幂、大数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-22 10:23 |只看该作者 |倒序浏览
题目地址:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1001

程序代码:
  1.      dr                s              5s 0
  2.      dn                s              5s 0
  3.      dp1               s             10a
  4.      dp2               s             10a
  5.      dta               s             15s 0 dim(60)
  6.      dtb               s             15s 0 dim(10)
  7.      dtc               s             15s 0 dim(60)
  8.      da                s             15s 0
  9.      di                s              5s 0
  10.      dj                s              5s 0
  11.      dk                s              5s 0
  12.      dz                s             15s 0
  13.      db                s             15s 0
  14.      dc                s             15s 0
  15.      de                s              5s 0
  16.      df                s             15s 0
  17.      dstr              s            500a
  18.      dstr2             s            500a
  19.      dlstr             s             20a
  20.      dlstr2            s             20a
  21.      c* init *******************************
  22.      c                   eval      n=%dec(p2:2:0)
  23.      c                   eval      f=0
  24.      c     '.'           scan      p1            i
  25.      c                   if        i<>0
  26.      c                   eval      lstr=%subst(p1:1:i-1)
  27.      c                   eval      j=6
  28.      c                   dow       '0'=%subst(p1:j:1)
  29.      c                   eval      j=j-1
  30.      c                   enddo
  31.      c                   eval      lstr=%trim(lstr)+%subst(p1:i+1:j-i)
  32.      c                   eval      r=%dec(lstr:5:0)
  33.      c                   eval      f=(j-i)*n
  34.      c                   else
  35.      c                   eval      r=%dec(p1:5:0)
  36.      c                   endif
  37.      c* compute ****************************
  38.      c                   eval      a=r
  39.      c                   eval      i=1
  40.      c                   dow       a>9999
  41.      c                   eval      ta(i)=%rem(a:10000)
  42.      c                   eval      a=a/10000
  43.      c                   eval      i=i+1
  44.      c                   enddo
  45.      c                   eval      ta(i)=a
  46.      c                   eval      e=n-1
  47.      c                   do        e
  48.      c                   eval      j=1
  49.      c                   dow       j<=i
  50.      c                   eval      a=ta(j)*r
  51.      c                   clear                   tb
  52.      c                   eval      k=1
  53.      c                   dow       a>9999
  54.      c                   eval      tb(k)=%rem(a:10000)
  55.      c                   eval      a=a/10000
  56.      c                   eval      k=k+1
  57.      c                   enddo
  58.      c                   eval      tb(k)=a
  59.      c                   eval      z=j+k-1
  60.      c                   eval      b=1
  61.      c                   dow       b<=k
  62.      c                   eval      tc(j+b-1)=tc(j+b-1)+tb(b)
  63.      c                   if        tc(j+b-1)>9999
  64.      c                   eval      tc(j+b)=tc(j+b)+tc(j+b-1)/10000
  65.      c                   eval      tc(j+b-1)=%rem(tc(j+b-1):10000)
  66.      c                   if        j+b>z
  67.      c                   eval      z=j+b
  68.      c                   endif
  69.      c                   endif
  70.      c                   eval      b=b+1
  71.      c                   enddo
  72.      c                   eval      j=j+1
  73.      c                   enddo
  74.      c                   eval      i=z
  75.      c                   eval      c=1
  76.      c                   do        60
  77.      c                   eval      ta(c)=tc(c)
  78.      c                   eval      c=c+1
  79.      c                   enddo
  80.      c                   clear                   tc
  81.      c                   enddo
  82.      c* init result ************************
  83.      c                   clear                   lstr
  84.      c                   eval      lstr=%char(ta(i))
  85.      c                   eval      str=%trim(lstr)
  86.      c     ' '           checkr    lstr          j
  87.      c                   eval      j=j+(i-1)*4
  88.      c                   eval      k=i-1
  89.      c                   dow       k>0
  90.      c                   clear                   lstr
  91.      c                   eval      lstr=%char(ta(k))
  92.      c     ' '           checkr    lstr          c
  93.      c                   if        c=0
  94.      c                   eval      lstr2='0000'
  95.      c                   elseif    c=1
  96.      c                   eval      lstr2='000'+%trim(lstr)
  97.      c                   elseif    c=2
  98.      c                   eval      lstr2='00'+%trim(lstr)
  99.      c                   elseif    c=3
  100.      c                   eval      lstr2='0'+%trim(lstr)
  101.      c                   elseif    c=4
  102.      c                   eval      lstr2=%trim(lstr)
  103.      c                   endif
  104.      c                   eval      str=%trim(str)+%trim(lstr2)
  105.      c                   eval      k=k-1
  106.      c                   enddo
  107.      c* add point***************************
  108.      c                   if        f=0
  109.      c                   eval      str2=str
  110.      c                   elseif    j>f
  111.      c                   eval      str2=%subst(str:1:j-f)+'.'
  112.      c                             +%subst(str:j-f+1:f)
  113.      c                   elseif    j<f
  114.      c                   eval      i=1
  115.      c                   eval      str2='.'
  116.      c                   dow       i<=f-j
  117.      c                   eval      str2=%trim(str2)+'0'
  118.      c                   eval      i=i+1
  119.      c                   enddo
  120.      c                   eval      str2=%trim(str2)+%trim(str)
  121.      c                   endif
  122.      c* print ******************************
  123.      c                   if        f=0
  124.      c                   eval      k=j/20
  125.      c                   eval      c=j-k*20
  126.      c                   elseif    j>f
  127.      c                   eval      k=(j+1)/20
  128.      c                   eval      c=(j+1)-k*20
  129.      c                   elseif    j<f
  130.      c                   eval      k=(f+1)/20
  131.      c                   eval      c=(f+1)-k*20
  132.      c                   endif
  133.      c                   eval      i=1
  134.      c                   eval      lstr=%trim(p1)+'?+%trim(p2)+'='
  135.      c     lstr          dsply
  136.      c                   dow       i<=k
  137.      c                   eval      lstr2=%subst(str2:1+(i-1)*20:20)
  138.      c     lstr2         dsply
  139.      c                   eval      i=i+1
  140.      c                   enddo
  141.      c                   if        c<>0
  142.      c                   eval      lstr2=%subst(str2:1+(i-1)*20:20)
  143.      c     lstr2         dsply
  144.      c                   endif
  145.      c     'end'         dsply
  146.      c                   return
  147.      c     *entry        plist
  148.      c                   parm                    p1
  149.      c                   parm                    p2
复制代码


程序调用:
call poj1001 ('1.0100' '12')

运行结果:
DSPLY  1.0100^12=         
DSPLY  1.126825030131969720
DSPLY  661201              
DSPLY  end

论坛徽章:
0
2 [报告]
发表于 2009-09-22 11:06 |只看该作者
性能测试

400战队
RPGLE分队
DSPLY  use time: .001408 sec
DSPLY  1.0100^12=            
DSPLY  1.126825030131969720  
DSPLY  661201               
DSPLY  end                  

CLE分队
1.126825030131969720661201           
use time: 0.007016sec               
Press ENTER to end terminal session.

windows战队
VC分队
1.126825030131969720661201
use time: 0.000532
Press any key to continue

论坛徽章:
0
3 [报告]
发表于 2009-09-22 12:08 |只看该作者

回复 #2 追尾巴 的帖子

rpgle主要用于数据处理,你这种性能测试是使用科学计算的方法,不大符合
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP