POJ1001、次幂、大数

发布于 2022-08-24 01:28:55 字数 23001 浏览 11 评论 2

题目地址:
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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

身边 2022-08-27 05:26:56

rpgle主要用于数据处理,你这种性能测试是使用科学计算的方法,不大符合

空心空情空意 2022-08-26 01:52:58

性能测试

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文