用c++语言高精度计算(不用二维数组)写以下程序:求斐波那契数列第n项。(大整数加法)输出n,输出斐波那契数列第n项值。n<=500。
时间: 2024-03-22 17:37:46 浏览: 65
好的,我可以为您编写这个程序。以下是代码:
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
class BigInteger {
public:
BigInteger() {}
BigInteger(const char* str) {
len = strlen(str);
for (int i = 0; i < len; ++i)
digit[i] = str[len - 1 - i] - '0';
}
BigInteger operator+(const BigInteger& b) const {
BigInteger ans;
int carry = 0;
for (int i = 0; i < max(len, b.len); ++i) {
int tmp = digit[i] + b.digit[i] + carry;
ans.digit[ans.len++] = tmp % 10;
carry = tmp / 10;
}
if (carry) ans.digit[ans.len++] = carry;
return ans;
}
void print() const {
for (int i = len - 1; i >= 0; --i)
cout << digit[i];
cout << endl;
}
private:
int len = 0;
int digit[MAXN] = {0};
};
int main() {
int n;
cin >> n;
BigInteger f1("1"), f2("1"), f3("0");
for (int i = 3; i <= n; ++i) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
cout << n << endl;
f3.print();
return 0;
}
```
这个程序使用了一个 `BigInteger` 类来进行高精度计算,不使用二维数组。在 `BigInteger` 类中,我们使用一个 `digit` 数组来存储每一位数字,使用一个 `len` 变量来记录数字的长度。在加法运算中,我们以从低位到高位的顺序依次计算每一位数字的和,并且记录进位。最后,如果有最高位的进位,需要将最高位加上进位。在主函数中,我们先输入 n,然后使用三个 `BigInteger` 对象来计算斐波那契数列第 n 项的值,并输出结果。
希望这个程序能够满足您的需求!
阅读全文