【发布时间】:2016-06-19 05:58:25
【问题描述】:
好的,我必须为我的 c++ 类做简单的任务。两个函数,第一个是斐波那契序列,第二个是一些随机序列(查找e)。它看起来像这样:
#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 不起作用
【问题讨论】:
-
考虑使用
<iostream>和std::cout在 C++ 中显示某些内容,而不是 printf -
尝试使用 %I64d 说明符。但是你会在 N = 100 时遇到同样的溢出问题。
-
%lld确实有效(至少在我的编译器中)。 -
您的问题是使用
%d打印不是普通int的内容。看来你已经找到了正确的方法,为什么不用呢? -
好的,
std::cout有效,但我有义务在printf()中执行此操作吗?第二件事。它有效,但仅适用于 80 多个数字。在 Python 中,我可以毫无问题地做 300 次。我可以用 C++ 做吗?
标签: c++ int long-integer