jjzjj

c++ - 什么数据类型可以存储100的阶乘

为什么下面的程序将100的阶乘打印为0作为输入。如果getFact函数返回类型为longdouble,则可以计算相同的阶乘,但要获取数字总和,我无法在longdouble上应用mod(%)运算符。注意unsignedlonglong和longdouble的大小在我的机器上是相同的。请建议输入100什么类型的数据会给出正确的输出。#include#includeunsignedlonglongintgetFactorial(int);unsignedlonglongintgetSum(unsignedlonglongint);intmain(){unsignedlonglongintfa

c++ - (long long)x 与 C++ 中的 (long long)floor(x) 相同吗?

假设我有一个double数据类型,名为“x”的变量。是否有必要将double转换为longlong数据类型与转换为longlongfloor(x)得到相同的结果。 最佳答案 不,这不一样。强制转换截断(向零舍入),floor函数向下舍入。演示:http://ideone.com/k8JuA9#include#includeintmain(){doublex=-1.4;std::cout 关于c++-(longlong)x与C++中的(longlong)floor(x)相同吗?,我们在St

c++ - 在 C++ 中使用内在函数检查 nans

我刚开始使用内在函数,但我想编写一个函数,该函数采用4个double计算a>1e-5的vector?std::sqrt(a):0.0我的第一直觉是这样写#include__m256df(__m256da){__m256dis_valid=a>_mm256_set1_pd(1e-5);__m256dsqrt_val=_mm256_sqrt_pd(a);returnis_valid*sqrt_val;}根据gcc.godbolt.com编译为以下内容f(double__vector(4)):vsqrtpdymm1,ymm0vcmpgtpdymm0,ymm0,YMMWORDPTR.LC0[r

c++ - 使用 Int 的初始化列表初始化 Long Double 的 vector

假设我有一个简单的类:classPvector{private:std::vectorpoint_list;public:Pvector(std::initializer_listcoords):point_list(coords){}Pvector(std::initializer_listcoords):point_list(coords){}};这将无法编译,因为longdouble模板化的std::vector无法从int类型模板化的初始化列表中初始化自身.然而,这很不方便,因为删除了第二个构造函数后,我无法在我的代码中执行以下操作:Pvectorpiece_movement(

c++ - "integer constant is too large for ‘long’ 求最大质因数时键入"

我正在解决Euler项目3:Description:Theprimefactorsof13195are5,7,13and29.Whatisthelargestprimefactorofthenumber600851475143?这是我生成答案的代码。但是我需要一个整数类型来保存600851475143。当我在Mac上的GCC上编译它时,我得到:integerconstantistoolargefor‘long’type".我预计longlong可以轻松持有这个数字。我也试过让它未签名。为什么我的代码不能保存这么小的数字?我该怎么做才能让它发挥作用?#include#includeusi

c++ - insert in string的效率

我正在尝试为比longlong更大的非常大的整数编写这个自定义加法类。我正在研究的一种方法是将整数保留为字符串,然后将字符转换为它们的int组件,然后添加每个“列”。我正在考虑的另一种方法是将字符串拆分为多个字符串,每个字符串都是longlong的大小,然后使用字符串流将其转换为longlong添加然后重新组合。无论如何,我发现加法最容易反向完成以允许结转数字这一事实。在这种情况下,我想知道字符串插入方法的效率。似乎因为一个字符串是一个字符数组,所以所有的字符都必须移动一个。所以它会有所不同,但效率似乎是O(n),其中n是字符串中的字符数。这是正确的,还是只是天真的解释?编辑:我现在对

c++ - `intmax_t` 在具有 64 位 `long int` 和 `long long int` 的平台上应该是什么?

在C++标准18.4中它指定:typedef'signedintegertype'intmax_t;根据具有64位longint和64位longlongint的平台标准,这个“有符号整数类型”应该是?请注意,longint和longlongint是不同的基本类型。C++标准说:Theheaderdefinesallfunctions,types,andmacrosthesameas7.18intheCstandard.在C标准(N1548)的7.18中,它说:Thefollowingtypedesignatesasignedintegertypecapableofrepresentin

c++ - unordered_map 没有匹配的调用错误

我的台词:unordered_map,longlong>myMap;错误:error:nomatchingfunctionforcallto'std::unordered_map,longlongint>::unordered_map()'重现错误的代码:#include#include#include#include#include#includeusingnamespacestd;unordered_map,longlong>myMap;intmain(){return0;} 最佳答案 std::unordered_map需要哈

c++ - 将 long int* 转换为 long long int*

在我的平台上,longint和longlongint是相同的(64位)。我有一个指向longint的指针,我想将它转换为指向longlongint的指针。以下代码static_cast(pointer);是不允许的。在C++11中执行此操作的正确方法是什么? 最佳答案 你必须强制“重新解释”指针:reinterpret_cast(pointer);这样的转换意味着编译器“停止检查,我知道如何更好地解释该表达式中的二进制数据”。因此,无论何时制作reinterpret_cast-检查您对平台、内存对齐等的了解。编写一些简单的单元测试等

c++ - 未对齐的内存访问 : is it defined behavior or not?

这个问题在这里已经有了答案:Whatdoesthestandardsayaboutunalignedmemoryaccess?(1个回答)关闭4年前。考虑以下代码:#includeintmain(){char*c=newchar('a');charac[4]={'a','b','c','d'};unsignedlonglongint*u=reinterpret_cast(c);unsignedlonglongint*uc=reinterpret_cast(&ac[3]);*u=42;*uc=42;std::cout这是否被视为有效代码,还是内存泄漏/未定义行为?我在问,因为通过:*u=