我正在尝试制作一个简单的斐波那契计算器,但 bitints 最大位数 65535 太小了。
有什么办法可以得到更大的整数吗?
typedef unsigned _BitInt(65535) u65535;
int main(void) {
int n = 99999;
u65535 a = 1;
u65535 b = 1;
u65535 c;
for (int i = 1; i < n; i++) {
c=a+b;
a=b;
b=c;
printf("fib: %u\n", a);
}
return 0;
} ```
从算法的角度来看,可以使用两个表示大整数的字符串创建一个简洁的求和函数。由于每个字符都是一个数字,因此字符串最多可以包含数百万个数字。这是我的示例代码。计算第 99,999 个斐波那契数有点慢,大约需要 10 秒。
string addStrings(const string &a, const string &b) {
string result;
int carry = 0, sum = 0;
int maxSize = max(a.size(), b.size());
for (int i = 0; i < maxSize || carry; ++i) {
sum = carry;
if (i < a.size()) sum += a[a.size() - 1 - i] - '0';
if (i < b.size()) sum += b[b.size() - 1 - i] - '0';
result.push_back(sum % 10 + '0');
carry = sum / 10;
}
reverse(result.begin(), result.end());
return result;
}
int main() {
string a = "0", b = "1";
for (ll i = 2; i <= 99999; ++i) {
string c = addStrings(a, b);
a = b;
b = c;
}
cout << a << endl;
}
我不确定这个回复是否满足您的要求。不过,我欢迎您提出任何反馈或意见。