pengqiushi @ 2022-10-07 12:05:41
代码如下:
#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
//cout<<sum[1];
la=lb;
for(int i=1; i<=lb; i++)
a[i]=b[i];
lb=lsum;
for(int i=1; i<=lsum; i++)
b[i]=sum[i];
int c=0;
//lsum=1;
for(int i=1; i<=1; i++){
sum[i]=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
//break;
}
}
}
}
int main()
{
int n;
cin>>n;
if(n==1||n==2){
cout<<"1";
return 0;
}
a[1]=1;
b[1]=1;
for(int i=1; i<=n; i++)
cmp();
/*if(n>=7)
sum[lsum]++;*/
for(int i=lsum; i>=1; i--)
cout<<sum[i];
return 0;
}
by Wangzj512 @ 2022-10-07 12:22:39
for(int i=1; i<=1; i++)
cmp() 里面这是什么玩意
by pengqiushi @ 2022-10-07 12:23:32
@Ja50nY0un9 我就是高精度模拟手算的啊
by Ja50nY0un9_as_AgNO3 @ 2022-10-07 12:24:20
@pengqiushi 建议看一下进位的处理捏
by _coastline_ @ 2022-10-07 12:28:21
if(n==1||n==2){
cout<<"1";
return 0;
}
这里n=2时应该是2啊
by _H17_ @ 2022-10-07 12:28:46
@pengqiushi 高精度加法的代码:
string p(string str_a,string str_b){
char a_digits[1000]={0},b_digits[1000]={0},ans_digits[1000]={0};
int a_len=0,b_len=0,ans_len=0,k=0;
a_len=str_a.size();
b_len=str_b.size();
for(int i=0;i<a_len;i++)a_digits[i]=str_a[a_len-i-1]-'0';
for(int i=0;i<b_len;i++)b_digits[i]=str_b[b_len-i-1]-'0';
ans_len=max(a_len,b_len);
for(int i=0;i<ans_len;i++)ans_digits[i]=a_digits[i]+b_digits[i]+k,k=ans_digits[i]/10,ans_digits[i]%=10;
if(k)ans_digits[ans_len++]=k;
reverse(ans_digits,ans_digits+ans_len);
for(int i=0;i<=ans_len-1;i++)ans_digits[i]+='0';
return ans_digits;
}
传入两个 string
传出的也是 string
。
by Wangzj512 @ 2022-10-07 12:30:35
还有,n=2时答案应为2(跨两级台阶或者两次一阶)
by _coastline_ @ 2022-10-07 12:35:20
a[1]=1;
b[1]=1;
b[1]=2才对
by pengqiushi @ 2022-10-07 12:54:28
#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
//cout<<sum[1];
la=lb;
for(int i=1; i<=lb; i++)
a[i]=b[i];
lb=lsum;
for(int i=1; i<=lsum; i++)
b[i]=sum[i];
int c=0;
//lsum=1;
for(int i=1; i<=lsum; i++){
sum[i]=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
//break;
}
}
}
}
int main()
{
int n;
cin>>n;
if(n==1||n==2){
cout<<n;
return 0;
}
a[1]=1;
b[1]=2;
for(int i=3; i<=n; i++)
cmp();
for(int i=lsum; i>=1; i--)
cout<<sum[i];
return 0;
}
by hema5177 @ 2022-10-07 12:54:34
@xujiabin194 没想到你竟然在线?
by pengqiushi @ 2022-10-07 12:54:58
改了,还是不行