【问题标题】:How do I generate a consecutive list of numbers greater then the size of a bigint?如何生成大于 bigint 大小的连续数字列表?
【发布时间】:2023-03-20 15:05:01
【问题描述】:

这类似于使用一些嵌套的 for 循环生成一个连续数字的列表,将数字加 1,然后显示该数字。我遇到的麻烦是弄清楚如何在不使用科学记数法显示数字的情况下生成介于 10^26 和 10^27 之间的连续数字列表。我正在考虑使用 int[26],但我不知道如何将 1 添加到更高的索引(比如 i[25])一旦我达到 10 并继续数到 10^27。

【问题讨论】:

  • 1^26 和 1^27 都等于 1。您的意思是 2^26 和 2^27 吗? :-P
  • 有必要自己写大号码吗?能用大号库吗?
  • 如果您想将每个数字表示为 int,int[27] 而不是 int[26] 会起作用吗?
  • @Wyzard 我的意思是 1 后面有 26 个 0,哎呀 :)。
  • 使用 .NET4 System.Numerics.BigInteger:for (var i = BigInteger.Pow(10, 26); i < BigInteger.Pow(10, 27); i++) Console.WriteLine(i);

标签: c#


【解决方案1】:

如果除了增加数字之外您没有进行任何计算,请考虑将其表示为字符串并以与手动算术相同的方式加 1:

  • 将字符串初始化为您想要开始的任何数字。
  • 在最右边的(数字)字符上加 1。
  • 如果它是
  • 否则,将其设置为 '0' 并将左侧的下一个字符加 1。
  • 重复携带过程,直到完成。

【讨论】:

  • 最好将其表示为char[],或者StringBuilder
【解决方案2】:

我不确定您所说的大于 Bigint 是什么意思,您是指 System.Uint64 还是 System.Numerics.BigInteger?如果您指的是 BigInteger,那么对大小的唯一限制是 OutOfMemory 异常,在处理非常大的数字时可能会抛出该异常。

请注意,BigInteger 是不可变的,因此执行myBigInt++ 之类的操作将创建一个新对象,并且如果在紧密循环中可能会导致性能问题。请参阅有关该主题的MSDN's notes 以获取更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多