string实现斐波那契数列的高精度计算

Meltryllis 2019-07-16 20:13:37 2019-07-18 16:38:55

求神犇指教字符串蒟蒻,是否可以用string类型的fib函数来实现其高精运算呢?(下面是蒟蒻的错误代码) 运行后会exit非0的值,好像string不能用来玩这个?

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
string hfsum(string s1,string s2)
{
	int s1L=s1.size();
	int s2L=s2.size();
	
	string rs1,rs2;
	for(int i=0;i<s1L;i++)//倒序操作 
	rs1[s1L-i-1]=s1[i];
	for(int i=0;i<s2L;i++)
	rs2[s2L-i-1]=s2[i];
	
	int a[1000*1000],x=0;//a储存结果,x用来进位 
	
	memset(a,0,sizeof(a));
	
	for(int i=0;i<max(s1L,s2L);i++)
	{
		a[i]=(rs1[i]-'0')+(rs2[i]-'0')+x;
		a[i]%=10;
		x=a[i]/10;
	}
	string result;
	for(int i=0;i<max(s1L,s2L);i++)
	result[max(s1L,s2L)-i-1]=a[i]+'0'; 
	
	return result;
}
string fib(int a)
{
	if(a==1)return "1";
	if(a==2)return "2";
	if(a>2)
	return hfsum(fib(n-1),fib(n-2));
	
}
int main()
{
	cin >> n;
	if(n==0)
	{
		cout << 0;
		return 0;
	}
	cout << fib(n);

return 0;
}

蒟蒻学的二维数组的标程,但还是想知道是不是可以用stringl来实现,如果可以该怎么实现

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,fib[5050][5050],len=1;
void hf(int k)//第k层 
{
	for(int i=1;i<=len;i++)
	fib[k][i]=fib[k-1][i]+fib[k-2][i];
	
	for(int i=1;i<=len;i++)
	{
		fib[k][i+1]+=fib[k][i]/10;
		fib[k][i]%=10;
		if(fib[k][len+1])
		len++;
	}
}

int main()
{
	cin >> n;
	fib[1][1]=1;
	fib[2][1]=2;
	for(int i=3;i<=n;i++)
	hf(i);
	
	for(int i=len;i>=1;i--)
	cout << fib[n][i];


return 0;
}