大数n次方算法笔记
来源:互联网 发布:大秦帝国之纵横知乎 编辑:程序博客网 时间:2024/04/24 03:14
问题是解决 A^n 的问题。
最简单的想法是使用循环:
long result = 1;
for (i = 1; i <= n; i++)
{
result = result * A;
}
return result;
但是,如果A与n足够大,就有可能在循环的某一步时得到过大的result,
超出现有变量保存范围。
所以,需要有其他方法对应A^n 的问题。
具体算法李老师的文章已经给出了。
http://student.csdn.net/space.php?uid=124362&do=blog&id=38231
本人自己的思路是:
1. 求解问题的关键是解决循环的某一步, result 特别大时,
result = result * A; 的计算问题,如果这一问题解决,
整个问题就迎刃而解了。
2. 设result一共有x位,A一共有y位。
设result各位的值为:r1,r2,...rx;A各位的值为:a1,a2,...,ay。
则result * A = [rx * 10^(x - 1) + ...+ r2 * 10^(2 - 1) + r1 * 10^(1 - 1) ]
* [ay * 10^(y - 1) + ...+ a2 * 10^(2 - 1) + a1 * 10^(1 - 1) ]
然后呢?处理好各项之间的乘积,注意每项所属位数,
如 ri * 10^(i - 1) * aj * 10^(j - 1) ,为result的第i位与A的第j位的乘积,
乘积的有效值为 (ri * aj),(ri * aj)这个值应该属于最终结果 result * A的第 (i + j - 1)位。
当然,还要注意,如果(ri * aj) 的结果大于9,则应进位。
如,(ri * aj) = 27,则第 (i + j - 1)位应为7, 并向第(i + j)位进2。
到此,其实问题已经解决。
3. 下面举个例子(为了简单,取了很简单的数)
设result = 1234, A = 123
将1,2,3,4分别乘以1,2,3,并注意乘积的位数,得到:
1 * 1 = 1 第 4 + 3 - 1 = 6 位。
1 * 2 = 2 第 4 + 2 - 1 = 5 位。
1 * 3 = 3 第 4 + 1 - 1 = 4 位。
2 * 1 = 2 第 3 + 3 - 1 = 5 位。
2 * 2 = 4 第 3 + 2 - 1 = 4 位。
2 * 3 = 6 第 3 + 1 - 1 = 3 位。
3 * 1 = 3 第 2 + 3 - 1 = 4 位。
3 * 2 = 6 第 2 + 2 - 1 = 3 位。
3 * 3 = 9 第 2 + 1 - 1 = 2 位。
4 * 1 = 4 第 1 + 3 - 1 = 3 位。
4 * 2 = 8 第 1 + 2 - 1 = 2 位。
4 * 3 = 12 第 1 + 1 - 1 = 1 位。
此时,结果的第1位只有一个解:12,但是12 > 9,所以第1位为2,并向第2位进位1。
第2位有2个解:8,9,并考虑第1位的进位,得,第2位 = 8 + 9 + 1 = 18,保留8,并向第3位进位1。
第3位有3个解:4,6,6, 并考虑第2位的进位,得,第3位 = 4 + 6 + 6 + 1 = 17,保留7,并向第4位进位1。
第4位有3个解:3,4,3, 并考虑第3位的进位,得,第4位 = 3 + 4 + 3 + 1 = 11,保留1,并向第5位进位1。
第5位有2个解:2,2, 并考虑第4位的进位,得,第5位 = 2 + 2 + 1 = 5,保留5,无进位。
第6位有1个解:1,保留1,无进位。
所以,最终结果为:151782 = 1234 * 123
- 大数n次方算法笔记
- 大数的n次方
- a的n次方的快速算法及大数相乘
- KMP算法&&大数运算,求1000!&&求n的n次方
- N的M次方大数模板
- 求n次方的算法
- 算法导论学习笔记(四):求X的N次方的二分实现
- a的n次方的快速算法
- 计算n的m次方算法
- a的n次方的高效算法
- 求n次方的高效算法
- 大数算法n次幂
- n的n次方的最后三位数的算法
- N的N次方
- N的N次方
- N的N次方
- N的N次方
- N的N次方
- 必须掌握的八个DOS命令(转载
- 用Parsley实现Flex Ioc的简单例子
- 插入多条记录_sql2005.cs中写sql
- dll类库aspx头部引用
- dos下删除文件和文件夹命令
- 大数n次方算法笔记
- c#实现的音频入库
- VB自定义日期控件的笔记
- InCallScreen.java/updateScreen()分析
- SYBASE 系统参数调整
- LoadRunner 简单笔记
- 数据逆向(二)——区分常量、变量、指针
- hp_ux11.11 下安装 sybase12.5.3
- 实现linux下的各种锁