【问题标题】:Can't store too lengthy int type不能存储太长的 int 类型
【发布时间】:2023-03-24 03:40:01
【问题描述】:

考虑问题:

It can be shown that for some powers of two in decimal format like:
2^9 = 512
2^89 = 618,970,019,642,690,137,449,562,112

结果以一个由 1s 和 2s 组成的字符串结尾。事实上,可以证明对于每个整数 R,有 存在 2 的幂,使得 K > 0 的 2K 在其最后 R 个数字中只有 1 和 2 的字符串。

可以在下表中清楚地显示:

R Smallest K 2^K
1 1 2
2 9 512
3 89 ...112
4 89 ...2112

使用这种技术,那么对于 1

(100^len)-i or (10^len)-i 

// 我将确定您想要的最后几位数字。

现在这个 temp = power(2,int) 随着 int 的增加而变得更高,你甚至不能将它存储在 int 类型甚至 long int 中.... 那么会怎么做。还有其他基于位串的解决方案吗?我想这可能会使这个问题变得容易。 提前致谢。

【问题讨论】:

    标签: c++


    【解决方案1】:

    不,我怀疑是否有任何基于“位串”的解决方案。那将是非常低效的。但是有像 GMP 这样的 Bignum 库,它具有比 int 类型大得多的固定大小或仅受内存容量限制的任意大小的变量类型,以及匹配的数学运算集,其工作方式类似于软件 FPU 仿真。

    reference 之后引用一个小的释义。

     #include <gmpxx.h>
    
     int
     main (void)
     {
       mpz_class a, b, c;
    
       a = 1234;
       b = "-5676739826856836954375492356569366529629568926519085610160816539856926459237598";
       c = a+b;
       cout << "sum is " << c << "\n";
       cout << "absolute value is " << abs(c) << "\n";
    
       return 0;
     }
    

    由于 C++ 运算符重载,它比 ANSI C 版本更易于使用。

    【讨论】:

    • 其实我第一次听说这个库。你能想出一个简单的说明性例子吗?
    【解决方案2】:

    由于您只对结果的n 最低有效数字感兴趣,您可以尝试设计一种仅计算这些数字的算法。根据standard algorithm for written multiplication,您可以看到乘积的n 最低有效数字完全由被乘数的n 最低有效数字决定。基于此,应该可以创建一个算法来计算适合long intR^K 的尽可能多的数字。

    您可能会遇到的唯一问题是,可能存在以匹配序列结尾的数字,而long int 可以容纳的长度更长。在这种情况下,您仍然可以使用自己的算法或库来计算额外的数字。

    请注意,这与大数字库所做的基本相同,只是您的方法可能更有效,因为您计算的数字更少,您不太可能需要。

    【讨论】:

      【解决方案3】:

      试试 GMP,http://gmplib.org/
      如果它适合内存,它可以存储任何大小的数字。
      尽管使用较少的蛮力方法可能会更好。

      【讨论】:

        【解决方案4】:

        您可以将二进制字符串存储在 std::bitset 或 std::vector 中 www.cplusplus.com/reference/bitset/bitset/

        我认为 bitset 是你的选择。

        虽然对 2 的幂运算使用大算术是不行的

        【讨论】:

        • 好的。就一件事。在这个问题中是否有任何特定的位串模式。
        猜你喜欢
        • 2022-09-30
        • 1970-01-01
        • 2017-11-22
        • 2018-03-28
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多