不能存储太长的 int 类型
Can't store too lengthy int type
考虑这个问题:
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)然后,如果您可以获得温度的长度,然后将其乘以
(100^len)-i or (10^len)-i
我将在哪里确定您想要多少最后几位数字。
现在这个 temp = power(2,int) 随着 int 的增加而变得更高,你甚至不能将其存储在 int 类型甚至长 int 中......那怎么办。还有没有其他基于位字符串的解决方案。我想这可能会使这个问题变得容易。提前谢谢。
不,我怀疑是否有任何基于"位字符串"的解决方案。那将是相当低效的。但是有像GMP这样的Bignum库,其特点是变量类型要么是比int类型大得多的固定大小,要么是仅受内存容量限制的任意大小,再加上匹配的数学运算集,其工作原理类似于软件FPU仿真。
引用后引用一个小的释义。
#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 版本更容易使用。
由于您只对结果中n
位最低有效数字感兴趣,因此您可以尝试设计一种仅计算这些数字的算法。基于书面乘法的标准算法,您可以看到乘积的n
最低有效数字完全由乘法的n
位最低有效数字决定。基于此,应该可以创建一种算法,该算法可以计算适合long int
的任意数量的R^K
位数。
您可能遇到的唯一问题是,可能有一些数字以匹配序列结尾,该序列比long int
可以容纳的更长。在这种情况下,您仍然可以使用自己的算法或库来计算额外的数字。
请注意,这基本上与大数字库所做的相同,只是您的方法可能更有效,因为您计算的位数更少,您不太可能需要。
试试 GMP,http://gmplib.org/
如果它适合内存,它可以存储任何大小的数字。
虽然,使用较少的蛮力方法可能会更好。
您可以将二进制字符串存储在 std::bitset 或 std::vector 中www.cplusplus.com/reference/bitset/bitset/
我认为位集是你的选择。
不过,对 2 的幂运算使用大算术不是
- 为什么 int 类型的枚举类值不能用作 int
- 如何将文本文件的特定行读取到 int 类型的数组中C++?
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 比较两个整数在C++中与未知 int 类型的相等性
- 二进制'operator+' 'int*'和'int*'类型的无效操作数
- 使用元编程选择 int 类型,将生成错误
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 复制初始化 - 从 'int' 类型转换为非标量类型
- 初始化cv :: mat ::具有int类型的定义大小的人
- 处理代码重新定义int类型(uint16_t,int16_t等),并不喜欢它
- 为什么没有"int"类型声明时输出不同?
- 在大型程序中将长变量更改为 int 类型
- 无法将 int 类型转换为时间类型(我的类类型)
- C++:无法在按位函数后将 int 类型设置为非标量
- 无法分配给INT类型的成员[10]
- C++ cin 将字符串读取到 int 类型中返回 0
- 为什么 decltype((i)) 是引用类型,而 decltype(i+0) 是 int 类型
- 使用4用于循环的4矩阵上的数组下标的“ int [int]类型”
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- 正在施放带有“ Int”类型的临时性