我的代码不能处理大数
My code doesnt work for big numbers
看,上面的代码是用于计算2000000以下质数的总和,但它没有给出正确的答案,但当我试图将10或20以下的质数求和时,它给出了正确的答案,谁能帮助我发现发生了什么?
#include <stdio.h>
#include <math.h>
int main(){
unsigned int ref = 0, m,divisoes = 0 , total = 0,flag = 2;
unsigned int soma =0;
while(ref < 9999999999999){
ref = (flag * 2)-1;
m = ceil(sqrt(ref));
while( m > 2){
if(ref % m == 0)
divisoes++;
m--;
}
if(divisoes == 0){
if( ref > 2000000) // limitador
break;
printf("%d n",ref);
soma += ref;
total ++;
}
divisoes = 0;
flag ++;
}
// somando mais 2 , por que dois é o unico numero primo par.
soma +=2;
total++;
printf("Soma %d , Total de Primos %d",soma,total);
return 0;
}
9999999999999
比unsigned int
的最大值(2^32 - 1)大很多。一个简单的修复方法是在所有的文字后面加上ULL
后缀,并将unsigned int
改为unsigned long long
。
数值型数据类型在内存中有一定的存储空间可以使用,在达到某个值后它们会溢出。
你可以把它想象成一辆汽车在行驶了太多英里后翻车的里程表。您可以使用更大的数据类型,它可能会支持您的需求。当数字变得足够大时,你需要一个库来处理任意长度的数字。在谷歌上搜索"c++ BigInteger"会得到很好的结果。
int数据类型只能存储(2^32-1),而您的数字大于此…使用unsigned long来存储长数字。.对于大的浮点值,也可以使用unsigned float或unsigned double。
相关文章:
- CStdioFile 不能处理大于 2GB 的文件?
- 为什么这个信号处理程序不能捕获 SIGHUP 或 SIGQUIT?
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- arm-none-eabi-g++ 不能使用 -flto 正确处理弱别名
- 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
- 方便的标志处理,所有标志都不能放入64位
- 为什么我不能在Windows Server 2008中使用System()从服务启动批处理文件
- 为什么这个简单的批处理方法不能按预期工作?
- 为什么谷歌破板不能处理所有崩溃?如何调试这些情况
- 为什么我的C++算法不能处理超过 62 位的整数?
- 为什么std::sqrt()在C++中不能正确处理双数据
- C样式强制转换可以处理的转换,但C++强制转换不能
- 多参数模板不能很好地处理友元声明
- 输入布局,访问违规,错误处理不能像我希望的那样工作
- 为什么swig在使用__getattribute__时不能正确处理AttributeError ?
- 不支持的操作.由JRC引擎处理的文档不能在c++堆栈中打开
- C程序不能处理与c++相关的错误
- 新行不能处理c++中的文件
- 双精度/打印在c++中不能处理14位数字
- QtConcurrent::run() 不能处理超过 5 个参数?