C++ 函数返回值过大如何用char*储存之类的问题

之前做了一道题,题目原型:
总时间限制: 2000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB
描述
对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式。
下图是一个2行17列的走道的某种铺法。
输入
整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <= n <= 250
输出
如题
样例输入
2
8
12
100
200
样例输出
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251

本题可以用递归,公式为:
n=1,s(n)=1;
n=2,s(n)=3;
n>=3,s(n)=s(n-1)+2*s(n-2);

然而题目要求n最大为250,所以只能用高精度算法,我用的char*类型,并且用一个add函数计算两个字符串的和。但是是有问题的。
因而,想知道如何处理这种函数返回值过大必须用字符串储存,并且还要使用递归的问题。

谢谢大家。

代码如下:
#include
using namespace std;
int max(int a,int b){return a>=b?a:b;}

char* add(char* a, char* b)
{
int al=strlen((const char*)a);

int bl=strlen((const char*)b);

int m=max(al,bl);

int c=new int[m];

int *d=new int[m];
int *s=new int[m+1];
for(int i=0;i<m+1;i++)
s[i]=0;

for(int i=0;i<al;i++)
c[i]=(int)(a[al-1-i]-48);

for(int i=0;i<bl;i++)

d[i]=(int)(b[bl-1-i]-48);

for(int i=al;i<m;i++)
c[i]=0;
for(int i=bl;i<m;i++)
d[i]=0;
for(int i=0;i<m;i++)
{
s[i]+=(c[i]+d[i])%10;

s[i+1]+=(c[i]+d[i])/10;
}
char
o=new char[m+1];
for(int i=0;i<m+1;i++)
{
o[i]=(char)(s[m-i]+48);
}
delete []c;
delete []d;
delete []s;
return o;
}
char* ta(int m)
{
if(m==1)
{
char* a=new char[1];
a[0]=1;
return a;
}
if(m==2)
{
char* b=new char[1];
b[0]=3;
return b;

}
return add(ta(m-1),add(ta(m-2),ta(m-2)));
}

void main()
{
int n;
cin>>n;
char* s=ta(n);
for(int i=0;i<strlen((const char*)s);i++)
cout<<s[i];
system("pause");
}

1个回答

xwzh_2003
xwzh_2003 你好,也就是说函数不能返回一个函数内部局部声明的char*类型来赋值,不过这样的话这个高精度数该怎么来处理呢
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问