min*_*234 3 c++ int long-integer
好的,我必须为我的c ++类做简单的任务.两个函数,首先是Fibonacci序列,第二个是随机序列(发现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");
}
Run Code Online (Sandbox Code Playgroud)
所以最后我做到了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不工作
评论中有信息告诉您如何long long正确打印,以便您可以从整个范围中受益.然而,正如他在回答中所说的那样,你将不会走得更远(它将在无符号64位上循环n = 94).
如果你想处理更大的Fibonacci数(事实上,任意大数)你可以使用boost :: multiprecision.
例如:
#include <boost/multiprecision/gmp.hpp>
boost::multiprecision::mpz_int fib(boost::multiprecision::mpz_int number)
{
boost::multiprecision::mpz_int a=0, b=1;
for (; number>0; number--)
{
b += a;
a = b-a;
}
return a;
}
int main()
{
std::cout << fib(500);
}
Run Code Online (Sandbox Code Playgroud)
在构建时,您需要与gmp链接.例如:
g++ -o fib fib.cc -lgmp
./fib
139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |