gpt4 book ai didi

c++ - C++ 中的大量问题

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:57 25 4
gpt4 key购买 nike

我正在研究一个相对简单的问题,该问题基于将某个值以下的所有素数加在一起。我已经编写了一个程序来完成这个任务。我正在使用长型变量。当我进入更高的数字(~200/300k)时,我用来跟踪总和的变量变为负值,尽管事实上没有向它添加负值(根据我的知识和我所做的一些测试) .数据类型是否有问题,或者我遗漏了什么。

我的代码如下(在 C++ 中)[Vector 基本上是一个动态数组,以防人们疑惑]:

bool checkPrime(int number, vector<long> & primes, int numberOfPrimes) {
for (int i=0; i<numberOfPrimes-1; i++) {
if(number%primes[i]==0) return false;
}
return true;
}

long solveProblem10(int maxNumber) {
long sumOfPrimes=0;
vector<long> primes;
primes.resize(1);
int numberOfPrimes=0;
for (int i=2; i<maxNumber; i++) {
if(checkPrime(i, primes, numberOfPrimes)) {
sumOfPrimes=sumOfPrimes+i;
primes[numberOfPrimes]=long(i);
numberOfPrimes++;
primes.resize(numberOfPrimes+1);
}
}
return sumOfPrimes;
}

最佳答案

整数表示值使用 two's complement这意味着最高位代表符号。当您将数字加起来足够高时,设置最高位(integer overflow)并且数字变为负数。

您可以通过使用 unsigned long(32 位,并且可能仍会溢出您正在求和的值)或使用 unsigned long long 来解决此问题(64 位)。

关于c++ - C++ 中的大量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com