求神犇指教字符串蒟蒻,是否可以用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;
}