洛谷 P1255 数楼梯 高精度加法

Posted lpl_bys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1255 数楼梯 高精度加法相关的知识,希望对你有一定的参考价值。

P1255 数楼梯

  • 时空限制1s / 128MB

题目描述

楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

输入输出格式

输入格式:

 

一个数字,楼梯数。

 

输出格式:

 

走的方式几种。

 

输入输出样例

输入样例#1:
4
输出样例#1:
5

说明

用递归会太慢,需用递推

(60% N<=50 ,100% N<=5000)

----------------------------------------------------------------------------------------------------

既然会打高精了,就应该会用高精做题

注意n==0时走法数为0 (讲道理不走也算是一种走法吧)

AC代码:

 

技术分享
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #define maxn 5010
 5 using namespace std;
 6 struct BigNum{
 7     int s[2333],len;
 8     BigNum(){len=1;memset(s,0,sizeof(s));}
 9 };
10 BigNum f[maxn];
11 int n;
12 void add(BigNum*,BigNum*,BigNum*);
13 int main(){
14     scanf("%d",&n);
15     if(n==0){
16         printf("0");
17         return 0;
18     }
19     f[0].s[1]=1;
20     f[1].s[1]=1;
21     for(int i=2;i<=n;i++) add(&f[i-1],&f[i-2],&f[i]);
22     for(int i=f[n].len;i>0;i--)
23        printf("%d",f[n].s[i]);
24     return 0;
25 }
26 void add(BigNum *x,BigNum *y,BigNum *z){
27     z->len=max(x->len,y->len);
28     for(int i=1;i<=z->len;i++){
29         z->s[i]+=x->s[i]+y->s[i];
30         z->s[i+1]=z->s[i]/10;
31         z->s[i]%=10;
32     }
33     if(z->s[z->len+1]) z->len++;
34 }
高精度加法

 

以上是关于洛谷 P1255 数楼梯 高精度加法的主要内容,如果未能解决你的问题,请参考以下文章

洛谷——P1255 数楼梯

luoguP1255 数楼梯 x

高精度:数楼梯

11-9-2017 星期四 NOIp周

B进制加法(洛谷1604)

洛谷 U3357 C2-走楼梯