好吧,我必须为我的C++类做简单的任务。两个函数,第一个是斐波那契数列,第二个是随机数列(发现e
)。它看起来像这样:C++处理大数据
#include <stdio.h>
#include <cstdlib>
#include <string>
#include <math.h>
void fib(int number)
{
int a=0, b=1;
printf("%d\n", a);
for (; number>0; number--)
{
printf("%d\n", b);
b+=a;
a = b-a;
}
}
void e_math(unsigned int number)
{
for (double n = 1; number>0; number--, n++)
{
printf("%f\n", pow((1+1/n), n));
}
}
int main(int argc, char** argv)
{
if (std::string(argv[2])=="f") fib(atoi(argv[1])-1);
if (std::string(argv[2])=="c") e_math(atoi(argv[1])-1);
else printf("Bad argument\n");
}
所以在最后我做g++ main.cpp -o app;./app 10 f
。它工作完美。但是当我想:嗯,也许让我们检查一下更大的数字,然后加上50就搞砸了。我的意思是它确实有40个序列号(用Python进行检查),但后来开始printf()
底片等我认为它可能是约int
范围。所以我改变int a=0, b=1
到long long a=0, b=1
,但还是它打印相同的(我还在用printf("%d..)
,因为%lld
不起作用
考虑使用''和'std :: cout'来显示C++中的内容,而不是printf –
GeoffreyB
尝试使用%I64d说明符。但你会得到相同的溢出问题,例如N = 100。 –
'%lld'确实有效(至少在我的编译器中)。 – fuenfundachtzig