求斐波那契数列的第800项,输出为啥一直是空


#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string get_result(string a, string b);
int main(void)
{
    string s1 = "1";
    string s2 = "1";
    int i;
    for (i = 3; i <= 800; i++)
    {
        string s3 = get_result(s1, s2);
        s1 = s2;
        s2 = s3;
    }

    reverse(s2.begin(), s2.end());

    cout << s2 << endl;
    return 0;
}

string get_result(string a, string b)
{
    string s;
    int len1 = a.size();
    int len2 = b.size();
    int i;
    int cal = 0;
    for (i = 0; i < len1; i++)
    {
        s[i] = ((a[i] - '0') + (b[i] - '0') + cal) % 10;
        cal = ((a[i] - '0') + (b[i] - '0') + cal) / 10;
    }

    if(len1<len2)
    {
        for (i=len1; i < len2; i++)
        {
          s[i] = ((b[i] - '0') + cal) % 10;
          cal = ((b[i] - '0') + cal) / 10;
        }
    }

    if(cal>0)
    {
        s[i] = cal;
    }

    return s;
}

首先,程序写的有点乱,get_result中有两处明显错误。

img

其一:string没有初始化长度,却直接使用下标运算取值
其二:我猜你想将a、b的第i个元素值相加。那么这里是不是要对结果+'0'呢,你这个表达式计算的结果是ascii值,转换成char要加'0'。

如果你向将string转为int的话推荐你使用 stoi() 函数,或者重新完善一下你的get_result函数