大整数数相乘的一个解决方案(附c# 代码)
问题描述:
给两个包含数字字符的长度为n的字符串A和B(假设都是数字字符) 如:
String A="123456712345567";
String B="1234567812345678";
要求将 A和B中的数值相乘结果以字符串输出结果。
我的思路:
-
先将字符串转化为整数数组(每个数字字符减去48即可)
2.开一个长度为A.Le
ngth+B.Length的整数数组(长度为n和长度为m的两个整数相乘结果的长度为x, (n+M)>=x>=Max(n,m))
3 .然后从数组的末尾开始逐位相乘,将A数组的第i位和B数组第j位的相乘的结果对10求余,余数放入结果数组的[i+j+1]位.对10除,除数放入第i+j 位。依次类推
A
0 | 1 | ... | i | n |
B
0 | 1 | ... | j | m |
Result: % *
0 | 1 | I+j+1 | M+n-1 |
完整代码:(粗体处为核心代码)
- class Program {
- static void Main(string[] args) {
- String num1 = "100";
- String num2 = "83387458293452";
- BigNumberMultiply bnm = new BigNumberMultiply(num1,num2);
- Console.WriteLine(bnm.Multiply());
- }
- }
- class BigNumberMultiply {
- String num1;
- String num2;
- public BigNumberMultiply(String num1,String num2) {
- this.num1 = num1;
- this.num2 = num2;
- }
- public String Multiply(){
- int num1Length = num1.Length;
- int num2Length = num2.Length;
- //tranfor the string to int array
- int[] inum1 = new int[num1Length];
- for (int i = 0; i < num1Length; i++) {
- inum1[i] = (int)num1[i]-48;
- }
- int[] inum2 = new int[num2Length];
- for (int i = 0; i < num2Length; i++) {
- inum2[i] = (int)num2[i] - 48;
- }
- int[] result=new int[num1Length+num2Length];
- for (int i = num1Length - 1; i >= 0; i--) {
- for (int j = num2Length - 1; j >= 0; j--) {
- result[i + j+1] += inum1[i] * inum2[j];
- result[i + j] += result[i + j+1] / 10;
- result[i + j+1] %= 10;
- }
- }
- char[] temp=new char[num1Length+num2Length];
- for(int i=0;i<(num1Length+num2Length);i++){
- temp[i]=(char)(result[i]+48);
- }
- String sResult = new String(temp);
- return sResult;
- }
- }