笔记:高精代码关键语句总结
2006-03-24 00:13
369 查看
确实好久没更新了……花功夫去做Vijos了,一天2道……
把去年重庆选拔赛的那个最小公倍数做了,把高精代码贴在这里供大家瞻仰。
每种运算都开了a、b、c三个数组,a、b是输入的要算的数,c是返回的结果。按惯例,数组倒序存字串,就是说a[1]表示的个位。
加法:
减法(默认了a比b大):
乘法:
除法有点复杂,需要调用前面的三种运算。算法和人做竖式计算一样,模拟试商。
简单说一下:
始终保持两个变量直到最后返回,一个当前得数,一个当前余数。初始化得数为0,余数为被除数。然后不断用当前的余数去减除数,同时当前得数不断跟着加1。
当除数远远小于被除数时,这种方法显然效率很低。为了能一次减很多,可以在每次减之前试商以减去尽可能大的整数倍的除数。试商方法很简单,先搜i再搜j,搜索小于当前余数的最大的“除数*j*10^i”。然后当前余数减去除数*j*10^i,得数加j*10^i。反复这个过程,直到余数小于除数。可以看到,对j的枚举即是试商的过程。
代码写出来不难,十几行搞定。
24的编剧越来越大胆了。
把去年重庆选拔赛的那个最小公倍数做了,把高精代码贴在这里供大家瞻仰。
每种运算都开了a、b、c三个数组,a、b是输入的要算的数,c是返回的结果。按惯例,数组倒序存字串,就是说a[1]表示的个位。
加法:
c[i]:=c[i]+a[i]+b[i]; c[i+1]:=c[i] div 10; c[i]:=c[i] mod 10;
减法(默认了a比b大):
if a[i]<b[i] then begin dec(a[i+1],1); inc(a[i],10); end; c[i]:=a[i]-b[i];
乘法:
inc(c[i+j-1],a[i]*b[j]); inc(c[i+j],c[i+j-1]div 10); c[i+j-1]:=c[i+j-1]mod 10;
除法有点复杂,需要调用前面的三种运算。算法和人做竖式计算一样,模拟试商。
简单说一下:
始终保持两个变量直到最后返回,一个当前得数,一个当前余数。初始化得数为0,余数为被除数。然后不断用当前的余数去减除数,同时当前得数不断跟着加1。
当除数远远小于被除数时,这种方法显然效率很低。为了能一次减很多,可以在每次减之前试商以减去尽可能大的整数倍的除数。试商方法很简单,先搜i再搜j,搜索小于当前余数的最大的“除数*j*10^i”。然后当前余数减去除数*j*10^i,得数加j*10^i。反复这个过程,直到余数小于除数。可以看到,对j的枚举即是试商的过程。
代码写出来不难,十几行搞定。
24的编剧越来越大胆了。
相关文章推荐
- 代码阅读总结之ASP.NET StartKit TimeTracker(应用程序路径之处理笔记)
- 第四天笔记和计算器关键代码
- 读代码大全二笔记之关于设计启发得总结
- C语言大总结(代码、笔记获取)
- 学习笔记(3):sql语句的总结
- MT8735 andorid7.0 充电调试总结(2)——电池驱动流程关键代码分析
- 织梦dedecms模板中运行php代码和mysql语句总结
- Coursera吴恩达机器学习课程 总结笔记及作业代码——第4周神经网络
- 应用中Matlab语句学习笔记总结1
- C++学习笔记序列之返回语句区别总结
- [笔记].活用Quartus II内置模板,快速输入HDL代码、TimeQuset约束及tcl语句等
- 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记)
- 代码阅读总结之ASP.NET StartKit TimeTracker(数据绑定之困惑笔记)
- iOS开发笔记--sqlite3 语句总结
- 工作笔记总结——后台代码部分
- 7089-1.Python机器学习:监督学习笔记—代码总结
- 第二行代码读书总结加笔记
- 代码笔记总结(一些别人写的代码)
- cocos2d 学习笔记 - 项目启动关键代码摘录
- Mysql数据库sql语句总结笔记(转载自Allen Iverson的文章,有删改)