C#高效的极大数乘法和加法源代码
看了很多人写的大数相乘的代码,感觉纯粹意义的计算乘法让人很是崩溃,既然乘法竖式的计算原本就是多个积相加,为什么还要搞的那么复杂呢。
原理如下:
1 2 3
* 5 6
------------------------
7 3 8
+ 6 1 5
------------------------
= 6 8 8 8
那么就是说只需要计算每位的积即可:即123*6=738;123*5=615;738+625*10=6888;
那么加法的效率大家都能做到很高效。这样大数的乘法就变成了大数乘以一个个位数了。
so:
数学乘法 从小学开始就一直是基于加法的,所以,我写了一个基于加法的大数乘法。扩展方法省去了类型转换的损耗,
原理如下:
1 2 3
* 5 6
------------------------
7 3 8
+ 6 1 5 0 这里加个0
-------------------------
= 6 8 8 8
好,直接上代码
[csharp] view plaincopyprint?
01.using System.Text;
02.
03.namespace LongNumber
04.{
05. public static class LongNumberHelper
06. {
07. /// <summary>
08. /// 大数相乘
09. /// </summary>
10. /// <param name="s1"></param>
11. /// <param name="s2"></param>
12. /// <returns></returns>
13. public static string LongNumberMul(string s1, string s2)
14. {
15. string result = "";
16. for (int i = s2.Length - 1; i >= 0; i--)
17. {
18. var s = StrMulChar(s1, s2[i], s2.Length - 1 - i);//计算s2每个数的乘积并给结果加足够的0
19. result = LongNumberAdd(result, s);//结果集累加
20. }
21. return result;
22. }
23. /// <summary>
24. /// 分步计算并进位&n