大数相乘(2)
来源:互联网 发布:医用软件开发 书籍 编辑:程序博客网 时间:2024/05/16 12:26
大数相乘(1)见此。
其中大数相乘(2)与大数相乘(1)中的思路相同,存储结构也类似,些许不同为存储时空间采用的是len1 * len2,比上面的(len1 + len2) * len2要小。因为最近学C#,所以重写了一下。
using System;using System.Collections.Generic;namespace mytest_csharp{ class logenzemultiply { private List<uint> value = new List<uint>(); private Boolean checkout = false; private logenzemultiply() { } private void check(string tocheck, out Boolean _check) { uint temp; int countcheck = 0; for(countcheck = 0; countcheck < tocheck.Length; ++countcheck) { if (!UInt32.TryParse(tocheck[countcheck].ToString(), out temp)) { break; } } if (countcheck == tocheck.Length) { _check = true; } else { _check = false; } } public logenzemultiply(string tocopy) { check(tocopy, out checkout); if (!this.checkout) { value = null; return; } uint temp; if (tocopy != null && value != null) { for (int copylength = 0; copylength < tocopy.Length; ++copylength) { uint.TryParse(tocopy[copylength].ToString(), out temp); value.Add(temp); } } } public void showvalue() { if (value != null) { for (int countvalue = 0; countvalue < value.Count; ++countvalue) { Console.Write(value[countvalue].ToString()); } Console.WriteLine(""); } } public List<uint> returnvalue() { return this.value; } public string multiply(ref logenzemultiply bignumber2) { int len1 = this.value.Count; int len2 = bignumber2.returnvalue().Count; int countcolumn = 0; int countrow = 0; uint[,] convertcolumn= new uint[len2 + 1, len1 + 1]; for (countrow = 0; countrow < len2 + 1; ++countrow) { for (countcolumn = 0; countcolumn < len1 + 1; ++countcolumn) { convertcolumn[countrow, countcolumn] = 0; } } for (countcolumn = 1; countcolumn < len1 + 1; ++countcolumn) { convertcolumn[0, countcolumn] = this.value[countcolumn - 1]; } for (countrow = 1; countrow < len2 + 1; ++countrow) { convertcolumn[countrow, 0] = bignumber2.returnvalue()[countrow - 1]; } for (countrow = 1; countrow < len2 + 1; ++countrow) { for (countcolumn = 1; countcolumn < len1 + 1; ++countcolumn) { convertcolumn[countrow, countcolumn] = convertcolumn[countrow, 0] * convertcolumn[0, countcolumn]; } } uint[] convertarray = new uint[len1 + len2]; for (countcolumn = 0; countcolumn < len1 + len2; ++countcolumn) { convertarray[countcolumn] = 0; } countcolumn = len1; countrow = len2; int countadd = len1 + len2; while (countadd> 1) { while(countcolumn + countrow == countadd && countrow <= len2 && countcolumn >= 1) { convertarray[countadd - 1] += convertcolumn[countrow, countcolumn]; --countcolumn; ++countrow; } if (countrow > len2 || countcolumn < 1) { if (countadd > len1 + 1) { countcolumn = len1; countrow = countadd - 1 - countcolumn; } else { countrow = 1; countcolumn = countadd - 1 - countrow; } } --countadd; } for (countcolumn = len1 + len2; countcolumn > 0; --countcolumn) { if (convertarray[countcolumn - 1] > 9) { convertarray[countcolumn - 2] += convertarray[countcolumn - 1] / 10; convertarray[countcolumn - 1] = convertarray[countcolumn - 1] % 10; } } string result = ""; string resulttemp = ""; countcolumn = 0; while (countcolumn < len1 + len2) { resulttemp = result.Insert(result.Length, convertarray[countcolumn].ToString()); result = resulttemp; countcolumn++; } while (result.StartsWith("0")) { resulttemp = result.Substring(1); result = resulttemp; } return result; } static void Main(string[] args) { logenzemultiply aaa = new logenzemultiply("11234567890"); logenzemultiply bbb = new logenzemultiply("00123456788"); aaa.showvalue(); bbb.showvalue(); Console.WriteLine(aaa.multiply(ref bbb)); logenzemultiply ccc = new logenzemultiply("123"); logenzemultiply ddd = new logenzemultiply("011"); ccc.showvalue(); ddd.showvalue(); string getresult = ccc.multiply(ref ddd); Console.WriteLine(getresult); } }}
- 大数相乘(2)
- 大数相乘2
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 《Effective C#》Item 10:小心GetHashCode函数所存在的陷阱
- 把数据库从oracle迁移到PPAS
- 美国次级贷款来龙去脉
- Random Forests
- C# 自定义特性
- 大数相乘(2)
- Java获取路径
- 客户需要增加注音、繁体输入法,手写输入法
- isc dhcp交叉编译
- Convert、Parse、TryParse、(int)
- site
- 一定要跳出这个被固定的圈
- 二级VF软件及题库及安装视频下载(上传完毕单击此处进入下载)
- C# 自动升级