在10^10到10^11之间的数字的数据类型应该是什么
What should be the data type for numbers in between the range of 10^10 - 10^11?
假设我有以下代码来循环数字,如下所示:
int p;
cin>>p;
for(unsigned long long int i=3*pow(10,p);i<6*pow(10,p);i++){
//some code goes here
}
现在,根据某些条件检查,我需要打印介于范围3*pow(10,p)<= i <6*pow(10,p)
之间的i
代码在upto p=8
上运行良好,然后变得相当缓慢,编译器似乎在p=9,10,11
及以后的版本中陷入了困境。我猜问题出在使用正确的数据类型上。这里应该使用什么样的正确数据类型?
这个循环的目的是在这个范围内找到合适的数字。体面的数字条件如下:1) 3、5或两者都作为其数字。不允许使用其他数字。2) 3出现的次数可以被5整除。3) 5出现的次数可被3整除。
注意:我在此处使用了unsigned long long int
(0 to 18,446,744,073,709,551,615)
。我在32位机器上运行。
您可以使用<cstdint>
及其int64_t
(保证有64位),并且您应该计算循环外部的功率;并且CCD_ 9在最近的C或C++标准中具有至少64位。
但是,正如1201ProgramAlarm的评论中所提到的,即使在我们的快速机器上,3e11(即3000亿)循环也很多。这可能需要几分钟或几个小时:一个基本操作需要一纳秒(或一半)。3e9操作需要几秒钟;3e11操作需要几分钟时间。循环体可以执行数千(甚至更多)基本操作(即机器代码指令)。
陷入困境的不是编译器:编译代码既简单又快速(只要程序大小合理,例如代码少于一万行,没有奇怪的预处理器或模板扩展技巧病态地扩展它们)。它是运行已编译可执行文件的计算机。
如果您对代码进行基准测试,不要忘记在编译器中启用优化(例如,如果使用GCC,则使用g++ -Wall -O2 -arch=native
进行编译…)
您应该更多地思考您的问题,并重新制定它以获得更小的搜索空间。
事实上,你体面的数字可能更多地被认为是代表它们的一串数字;毕竟,一个数字没有数字(特别是用二进制或三进制表示的数字不能有3
作为其数字),只有数字的某些表示有数字。
然后,您应该只考虑短于12个字符的3
或5
的字符串,并且它们的数量要少得多(小于10000,可能小于213,即8192);迭代一万次应该很快。因此,生成每个小于例如15个字符的字符串,其中只有3
和5
,并测试它是否合适。
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- 在C++中,运算符 sizeof 返回什么数据类型?
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 什么是 16 字节有符号整数数据类型?
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- 在C 中,对Pair类STL的用途是什么,就像数据类型或容器一样
- 创建 Timer 类时,我应该使用什么数据类型来保存值?(C/C++)
- C++什么数据类型是thread_id,它能分配给变量吗
- 什么是代数数据类型的惯用现代C++
- 什么数据类型是 16 位操作系统中的 32 位和 32 位操作系统中的 64 位
- 为什么使用"int"数据类型而不是"float"数据类型?
- 使用二进制数据块时,在C++中应该使用什么数据类型
- 对于一般用途的整数,我应该使用什么数据类型?
- 解析是如何工作的,或者是什么使类型完整或不完整
- 在 S 被解析为 for(auto &s :text)后,S 应该是什么类类型?
- 什么数据类型可以存储100的阶乘?
- 在知道变量是什么数据类型之前如何声明它
- 我必须使用什么C数据类型
- 是int, char也是抽象数据类型