高精斐波那契数列:
#include<iostream>
using namespace std;
string add(string x, string y){
string sum = "";
bool plus_one = false, xone = false, yone = false;
unsigned long long xlen = x.size() - 1, ylen = y.size() - 1;
for(unsigned long long i = 0; i < max(x.size(),y.size()); ++i) {
if(xone == true) {
if(plus_one == true) {
sum[i] += y[ylen - i] - '0';
plus_one = false;
if(sum[i] > '9'){
sum[i] -= 10;
sum += '1';
plus_one = true;
}
}
else {
sum += '0' + (y[ylen - i] - '0');
}
}
else if(yone == true) {
if(plus_one == true) {
sum[i] += x[xlen - i] - '0';
plus_one = false;
if(sum[i] > '9'){
sum[i] -= 10;
sum += '1';
plus_one = true;
}
}
else {
sum += '0' + (x[xlen - i] - '0');
}
}
else {
if(xlen - i == 0){
xone = true;
}
if(ylen - i == 0){
yone = true;
}
if(plus_one == true) {
sum[i] += ((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10;
plus_one = false;
if(sum[i] > '9') {
sum[i] -= 10;
plus_one = true;
}
}
else {
sum += '0' + (((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10);
}
if('0' + (x[xlen - i] - '0') + (y[ylen - i] - '0') > '9' || plus_one == true) {
sum += '1';
plus_one = true;
}
}
}
for(unsigned long long i = 0, t = sum.size() - 1; i < t; ++i, --t) {
char tmp = sum[i];
sum[i] = sum[t];
sum[t] = tmp;
}
return sum;
}
void sub_one(string *x) {
unsigned long long k = x -> size() - 1;
while(x -> substr(k,1) == "0") {
--k;
}
if(k == x -> size() - 1) {
char tmp = *(--(x -> end()));
x -> erase(--(x -> end()));
x -> insert(x -> end(), tmp - 1);
}
else {
char tmp = *(x -> begin() + k);
x -> erase(x -> begin() + k);
if(k != 0 || tmp != '1') {
x -> insert(x -> begin() + k, tmp - 1);
while(k != x -> size() - 1) {
++k;
x -> erase(x -> begin() + k);
x -> insert(x -> begin() + k, '9');
}
}
else {
while(k != x -> size()) {
x -> erase(x -> begin() + k);
x -> insert(x -> begin() + k, '9');
++k;
}
}
}
return;
}
string ans = "1", m = "0", n = "0";
int main() {
string a;
cin >> a;
while(a != "0") {
sub_one(&a);
ans = add(ans,n);
n = m;
m = ans;
}
cout << ans;
return 0;
}
理论上可以求到斐波那契数列的第264−1项(?)