【发布时间】:2015-11-19 03:45:36
【问题描述】:
我正在编写一个程序来打印前 100 个卢卡斯数字(它们就像斐波那契),但最后几个数字不适合 unsigned long long int。我尝试使用 long double,但它并不精确,而且我得到的结果与我应该得到的有所不同。
这是一个家庭作业,我的老师特别指定我们不需要使用除 stdio.h 之外的任何其他库。
我尝试制作一种将字符串添加为数字的方法,但这超出了经验,我真诚地怀疑这是我们必须做的。
如果不精确,它看起来像这样:
#include <stdio.h>
int main()
{
long double firstNumber = 2;
long double secondNumber = 1;
long double thirdNumber;
int i;
for (i = 2; i <= 100; i += 1)
{
thirdNumber = secondNumber + firstNumber;
firstNumber = secondNumber;
secondNumber = thirdNumber;
printf("%Lf, ", thirdNumber);
}
return 0;
}
【问题讨论】:
-
你了解数组吗?例如,您可以将单个“数字”存储为一个数字数组,其中每个元素包含 0 到 9。由于操作只是加法,因此实现数组加法应该很容易(不要忘记在加法后进行标准化)。
-
@WhozCraig 根据 WolframAlpha 的说法,一个 64 位无符号整数的最大值是
18446744073709551615,但 L100 是792070839848372253127。 wolframalpha.com/input/?i=what+is+the+100th+Lucas+number%3F -
了解bignums 并查看gmplib.org
-
最好的方法是使用数组和做老派数学。