【问题标题】:Printing multiple integers as one arbitrarily long decimal string将多个整数打印为一个任意长度的十进制字符串
【发布时间】:2012-12-02 10:38:01
【问题描述】:

假设我有 16 个 64 位无符号整数。在执行操作时,我一直小心翼翼地在他们之间适当地喂进进位。我可以将它们输入一种方法,将它们全部转换为一串十进制数字,就好像它是一个 1024 位二进制数一样?换句话说,是否有可能制作一种方法可以用于表示一个更大整数的任意数量的整数?

我想有符号整数会更困难,因为要处理最重要的位。我想最重要的整数将是有符号整数,其余的将是无符号的,以表示数字的剩余“部分”。

(这与another question半相关。)

【问题讨论】:

    标签: c integer integer-arithmetic


    【解决方案1】:

    您可以使用double dabble algorithm,它避免了多精度乘法和除法的需要。事实上,维基百科页面包含该算法的 C 实现。

    【讨论】:

      【解决方案2】:

      这有点不清楚。

      当然是这样的函数

      void print_1024bit(uint64_t digits[]);
      

      可以这样写。但如果你的意思是如果任何标准库的 printf()-family 函数可以做到这一点,那么我认为答案是否定的。

      正如您可能在另一个问题中看到的那样,将二进制数转换为不同的基数b的核心由两个操作组成:

      • 取模b,找出当前的最低有效位
      • 除以 b,生成后删除该数字

      当应用到数字为 0 时,这会以相反的顺序生成所有数字。

      因此,您需要为您的 1024 位数字实现“模 10”和“除以 10”。

      例如,考虑十进制数 4711,我们希望将其转换为八进制以用于此示例:

      1. 4711 % 8 是 7,所以最右边的数字是 7
      2. 4711 / 8 是 588
      3. 588 % 8 是 4,下一位是 4
      4. 588 / 8 是 73
      5. 73 % 8 是 1
      6. 73 / 8 等于 9
      7. 9 % 8 是 1
      8. 8 / 8 是 1
      9. 1 % 8 是 1
      10. 1 / 8 为 0,我们完成了。

      因此,从底部向上到最右边的数字读取粗体数字,我们得出结论 471110 = 111478 .您可以使用计算器来验证这一点,或者相信我。 :)

      【讨论】:

        【解决方案3】:

        当然有可能,但不是很直接。

        与其重新发明轮子,不如重用一个库?

        GNU Multi Precision Arithmetic Library 就是这样一种可能性。我自己不需要这些东西,但它似乎符合你的要求。

        【讨论】:

        • 听这个家伙的,使用图书馆。
        猜你喜欢
        • 2013-03-14
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 2015-03-07
        相关资源
        最近更新 更多