c++ - 不能存储太长的 int 类型

标签 c++

考虑问题:

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

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

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

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

使用这种技术,对于 1 <= R <= 10,所有最小 K 值的总和是多少? 建议的解决方案: 现在这个问题并不难解决。你可以简单地做 int temp = power(2, int) 然后如果你能得到 temp 的长度然后将它乘以

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

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

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

最佳答案

不,我怀疑是否有任何基于“位串”的解决方案。那将是非常低效的。但是有像 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 版本更容易使用。

关于c++ - 不能存储太长的 int 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13912086/

相关文章:

c++ - 多线程C++时成员变量自行改变

c++ - 将 std::vector<bool> 转换为 std::string

c++ - 为什么初始化 char*[] 需要 const 而 string[] 不需要?

C++ isMember 函数崩溃

c++ - 使用 boost 库的多线程

c++ - 二叉树运行时误差的后序迭代遍历

c++ - 使用 STL 算法合并 2 个 vector

c++ - 如何创建一个程序来列出 Mac 中的所有 USB 设备?

python - 如何导入或安装预构建的 python 扩展模块 (C++)(即未通过 setuptools 编译的库)?

C++读取注册表