【发布时间】:2015-09-06 14:13:30
【问题描述】:
目前我正在开发一个处理超大 integernumbers 的程序。
为了防止碰到intiger.maxvalue,脚本将字符串处理为数字,并将它们拆分为List<int>,如下所示
0 是当前已知的最高值
- 列表条目 0:123(1.23 亿)
- 列表条目 1:321(三十二万一千)
- 列表条目 2:777(七百七十七)
现在我的问题是:如何检查传入的字符串值是否可以从这些值中减去?
我目前做的减法开始如下,但我卡在减法部分。
public bool Subtract(string value)
{
string cleanedNumeric = NumericAndSpaces(value);
List<string> input = new List<string>(cleanedNumeric.Split(' '));
// In case 1) the amount is bigger 2) biggest value exceeded by a 10 fold
// 3) biggest value exceeds the value
if (input.Count > values.Count ||
input[input.Count - 1].Length > values[0].ToString().Length ||
FastParseInt(input[input.Count -1]) > values[0])
return false;
// Flip the array for ease of comparison
input.Reverse();
return true;
}
编辑 该程序中可实现的最高数字的当前目标是 Googolplex 并且仅限于 .net3.5 MONO
【问题讨论】:
-
我不确定你想达到什么目标,但你是否已经考虑过使用System.Numerics.BigInteger?
-
为什么不用
long,应该够大了吧? -
@elgonzo 是的,但如果我相信的话,我相信这也是一个限制值,最高可达 2^(2^33)。
-
@MXD,没有。它没有上限和下限 - 限制只是由可用内存给出。阅读documentation。尤其是备注部分...(阅读备注部分应该始终是验证自己假设的第一步;-))
-
@MXD 据我所知,除了内存没有限制……它的描述是表示一个任意大的有符号整数。