码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1255 数楼梯 高精度加法

时间:2017-11-04 23:39:32      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:main   print   opened   pac   static   orange   eve   span   turn   

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 数楼梯 高精度加法

标签:main   print   opened   pac   static   orange   eve   span   turn   

原文地址:http://www.cnblogs.com/lpl-bys/p/7784880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!