#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中有两处明显错误。
其一:string没有初始化长度,却直接使用下标运算取值
其二:我猜你想将a、b的第i个元素值相加。那么这里是不是要对结果+'0'呢,你这个表达式计算的结果是ascii值,转换成char要加'0'。
如果你向将string转为int的话推荐你使用 stoi() 函数,或者重新完善一下你的get_result函数