c++ 的高精度(至少1000位)斐波那契数列问题 求改正代码

我先编了加法器。。没有问题我的加法器代码是#include<iostream>#include<cstring>usingnamespacestd;charsum[120... 我先编了加法器。。没有问题
我的加法器代码是
#include<iostream>
#include<cstring>
using namespace std;
char sum[1200];
int s=0;

int main()
{
string s1,s2;
int a[1200],b[1200],he;
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>s1>>s2;

a[0]=s1.length();
for(i=1;i<=a[0];i++)
{
a[i]=s1[a[0]-i]-'0';
}

b[0]=s2.length();
for(i=1;i<=b[0];i++)
{
b[i]=s2[b[0]-i]-'0';
}

he=(a[0]>b[0]?a[0]:b[0]);

for(i=1;i<=he;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}

he++;

while((a[he]==0)&&(he>1))
he--;

for(i=he,s=0;i>=1;i--,s++)
{
sum[s]=a[i]+'0';
}

cout<<sum;

}

以上应该没有问题,不需更正

然后再从这个加法器改成斐波那契数列这题。。
要求是高精度!1000位
斐波那契数列就是1,1,2,3,5,8,13,21。。。f(n)=f(n-1)+f(n-2)
改完就有问题了。。
我输入n等于1——7都没问题
但n=8就出问题了,应该是8+13=21但却输出31
好像只要是一个n-1位数加一个n位数就会在最高位额外多1。。
这是怎么回事。。
改成斐波那契数列后的代码是
#include<iostream>
#include<cstring>
using namespace std;
char sum[1200];
int s=0,m=0,n;
int main()
{
cin>>n;
string s1,s2;
int a[1200],b[1200];
int he,i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
s1="1";
s2="1";
for(m=2;m<n;m++)
{
a[0]=s1.length();
for(i=1;i<=a[0];i++)
{
a[i]=s1[a[0]-i]-'0';
}
b[0]=s2.length();
for(i=1;i<=b[0];i++)
{
b[i]=s2[b[0]-i]-'0';
}
he=(a[0]>b[0]?a[0]:b[0]);
for(i=1;i<=he;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
he++;
while((a[he]==0)&&(he>1))
he--;
for(i=he,s=0;i>=1;i--,s++)
{
sum[s]=a[i]+'0';
}
s1=s2;
s2=sum;
}
cout<<s2;
}

求改正。
展开
 我来答
匿名用户
推荐于2016-02-19
展开全部
应该把memset()调用放在for循环中,每次计算之前都应该将a和b“清零”,修改如下:

#include<iostream>
#include<cstring>
using namespace std;
char sum[1200];
int s=0,m=0,n;
int main()
{
cin>>n;
string s1,s2;
int a[1200],b[1200];
int he,i;
//注意这里
s1="1";
s2="1";

for(m=2;m<n;m++)
{
memset(a,0,sizeof(a));//注意这里
memset(b,0,sizeof(b));//注意这里
a[0]=s1.length();
for(i=1;i<=a[0];i++)
{
a[i]=s1[a[0]-i]-'0';
}
b[0]=s2.length();
for(i=1;i<=b[0];i++)
{
b[i]=s2[b[0]-i]-'0';
}
he=(a[0]>b[0]?a[0]:b[0]);
for(i=1;i<=he;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
he++;
while((a[he]==0)&&(he>1))
he--;
for(i=he,s=0;i>=1;i--,s++)
{
sum[s]=a[i]+'0';
}
s1=s2;
s2=sum;
}
cout<<s2<<endl;

}
匿名用户
2018-07-30
展开全部
#include<iostream>
#include<cstring>
using namespace std;
char sum[1200];
int s=0,m=0,n;
int main()
{
cin>>n;
string s1,s2;
int a[1200],b[1200];
int he,i;
//注意这里
s1="1";
s2="1";

for(m=2;m<n;m++)
{
memset(a,0,sizeof(a));//注意这里
memset(b,0,sizeof(b));//注意这里
a[0]=s1.length();
for(i=1;i<=a[0];i++)
{
a[i]=s1[a[0]-i]-'0';
}
b[0]=s2.length();
for(i=1;i<=b[0];i++)
{
b[i]=s2[b[0]-i]-'0';
}
he=(a[0]>b[0]?a[0]:b[0]);
for(i=1;i<=he;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
he++;
while((a[he]==0)&&(he>1))
he--;
for(i=he,s=0;i>=1;i--,s++)
{
sum[s]=a[i]+'0';
}
s1=s2;
s2=sum;
}
cout<<s2<<endl;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式