POJ1001、次幂、大数
题目地址:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1001
程序代码:
- dr s 5s 0
- dn s 5s 0
- dp1 s 10a
- dp2 s 10a
- dta s 15s 0 dim(60)
- dtb s 15s 0 dim(10)
- dtc s 15s 0 dim(60)
- da s 15s 0
- di s 5s 0
- dj s 5s 0
- dk s 5s 0
- dz s 15s 0
- db s 15s 0
- dc s 15s 0
- de s 5s 0
- df s 15s 0
- dstr s 500a
- dstr2 s 500a
- dlstr s 20a
- dlstr2 s 20a
- c* init *******************************
- c eval n=%dec(p2:2:0)
- c eval f=0
- c '.' scan p1 i
- c if i<>0
- c eval lstr=%subst(p1:1:i-1)
- c eval j=6
- c dow '0'=%subst(p1:j:1)
- c eval j=j-1
- c enddo
- c eval lstr=%trim(lstr)+%subst(p1:i+1:j-i)
- c eval r=%dec(lstr:5:0)
- c eval f=(j-i)*n
- c else
- c eval r=%dec(p1:5:0)
- c endif
- c* compute ****************************
- c eval a=r
- c eval i=1
- c dow a>9999
- c eval ta(i)=%rem(a:10000)
- c eval a=a/10000
- c eval i=i+1
- c enddo
- c eval ta(i)=a
- c eval e=n-1
- c do e
- c eval j=1
- c dow j<=i
- c eval a=ta(j)*r
- c clear tb
- c eval k=1
- c dow a>9999
- c eval tb(k)=%rem(a:10000)
- c eval a=a/10000
- c eval k=k+1
- c enddo
- c eval tb(k)=a
- c eval z=j+k-1
- c eval b=1
- c dow b<=k
- c eval tc(j+b-1)=tc(j+b-1)+tb(b)
- c if tc(j+b-1)>9999
- c eval tc(j+b)=tc(j+b)+tc(j+b-1)/10000
- c eval tc(j+b-1)=%rem(tc(j+b-1):10000)
- c if j+b>z
- c eval z=j+b
- c endif
- c endif
- c eval b=b+1
- c enddo
- c eval j=j+1
- c enddo
- c eval i=z
- c eval c=1
- c do 60
- c eval ta(c)=tc(c)
- c eval c=c+1
- c enddo
- c clear tc
- c enddo
- c* init result ************************
- c clear lstr
- c eval lstr=%char(ta(i))
- c eval str=%trim(lstr)
- c ' ' checkr lstr j
- c eval j=j+(i-1)*4
- c eval k=i-1
- c dow k>0
- c clear lstr
- c eval lstr=%char(ta(k))
- c ' ' checkr lstr c
- c if c=0
- c eval lstr2='0000'
- c elseif c=1
- c eval lstr2='000'+%trim(lstr)
- c elseif c=2
- c eval lstr2='00'+%trim(lstr)
- c elseif c=3
- c eval lstr2='0'+%trim(lstr)
- c elseif c=4
- c eval lstr2=%trim(lstr)
- c endif
- c eval str=%trim(str)+%trim(lstr2)
- c eval k=k-1
- c enddo
- c* add point***************************
- c if f=0
- c eval str2=str
- c elseif j>f
- c eval str2=%subst(str:1:j-f)+'.'
- c +%subst(str:j-f+1:f)
- c elseif j<f
- c eval i=1
- c eval str2='.'
- c dow i<=f-j
- c eval str2=%trim(str2)+'0'
- c eval i=i+1
- c enddo
- c eval str2=%trim(str2)+%trim(str)
- c endif
- c* print ******************************
- c if f=0
- c eval k=j/20
- c eval c=j-k*20
- c elseif j>f
- c eval k=(j+1)/20
- c eval c=(j+1)-k*20
- c elseif j<f
- c eval k=(f+1)/20
- c eval c=(f+1)-k*20
- c endif
- c eval i=1
- c eval lstr=%trim(p1)+'?+%trim(p2)+'='
- c lstr dsply
- c dow i<=k
- c eval lstr2=%subst(str2:1+(i-1)*20:20)
- c lstr2 dsply
- c eval i=i+1
- c enddo
- c if c<>0
- c eval lstr2=%subst(str2:1+(i-1)*20:20)
- c lstr2 dsply
- c endif
- c 'end' dsply
- c return
- c *entry plist
- c parm p1
- c parm p2
复制代码
程序调用:
call poj1001 ('1.0100' '12')
运行结果:
DSPLY 1.0100^12=
DSPLY 1.126825030131969720
DSPLY 661201
DSPLY end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
rpgle主要用于数据处理,你这种性能测试是使用科学计算的方法,不大符合
性能测试
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