洛谷 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 }

高精度加法

时间: 2024-10-17 04:17:06

洛谷 P1255 数楼梯 高精度加法的相关文章

洛谷 P1255 数楼梯

P1255 数楼梯 题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入输出格式 输入格式: 一个数字,楼梯数. 输出格式: 走的方式几种. 输入输出样例 输入样例#1: 复制 4 输出样例#1: 复制 5 说明 用递归会太慢,需用递推 (60% N<=50 ,100% N<=5000) 思路:数学+高精 #include<cstdio> #include<cstring> #include<iostream&

洛谷——P1255 数楼梯

题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入输出格式 输入格式: 一个数字,楼梯数. 输出格式: 走的方式几种. 输入输出样例 输入样例#1: 4 输出样例#1: 5 说明 用递归会太慢,需用递推 (60% N<=50 ,100% N<=5000) 也是曾经做过的一道题,单纯复习一下高精斐波那契模板 #include<cstdio> #include<cstdlib> #include<cstring&

洛谷P1080 国王游戏 高精度 贪心 数学推公式

洛谷P1080 国王游戏        数学推公式      高精度    贪心 然而这并不是我打出来的,抄题解... 将左手与右手的乘积从小到大排序,然后计算求最大值即可.(需要高精度) 证明: 1)知道,如果相邻的两个人交换位置,只会影响到这两个人的值,不会影响他人 2)假设相邻的两个人i, i + 1.设A[i] B[i] <= A[i + 1] B[i + 1],i之前所有人的左手乘积为S. 则,ans1 = max{S / B[i], S * A[i] / B[i + 1]} 若交换

洛谷 U3357 C2-走楼梯

U3357 C2-走楼梯 题目背景 在你成功地解决了上一个问题之后,方方方不禁有些气恼,于是他在楼梯上跳来跳去,想要你求出他跳的方案数... 题目描述 方方方站在一个n阶楼梯下面,他每次可以往上跳一步或两步,往下跳一步到四步(由于地心引力跳得比较远),而且在往下跳的时候你只能踩在你往上跳时踩过的格子. 现在方方方在楼梯上乱跳,想问他跳到楼梯顶上最后又跳回楼梯下面的方案数mod 2333333. 请注意:针对题目有歧义的情况,这里再说明一下.方方方只能一直向上跳,跳到楼梯最上面,然后再往下跳,跳回

洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)

P1952 火星上的加法运算_NOI导刊2009提高(3) 题目描述 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限.她想向你求助,作为一位优秀的程序员,你当然不会拒绝. 输入输出格式 输入格式: 第一行先愉入一个运算的进制N(2<=N<=36),接下来两行为需要进行运算的字符,其中每个字符串的长度不超过200位,其为N进制的数.其中包括0-9及a-z(代表10-35). 输出格式: 在N进制下它们的和 输入输出样例 输入样例#1: 复制 20 1234567

洛谷 P1028 数的计算

题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3.加上数后,继续按此规则进行处理,直到不能再加自然数为止. 输入输出格式 输入格式: 一个自然数n(n<=1000) 输出格式: 一个整数,表示具有该性质数的个数. 输入输出样例 输入样例#1: 6 输出样例#1: 6 说明 满足条件的数为 6,16,26,126,36

[NOIP2001] 提高组 洛谷P1025 数的划分

题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; 暴搜. 可以加一点剪枝,比如说当剩余数不够均分成剩余

洛谷-拼数-NOIP1998提高组复赛

题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613 输入输出格式 Input/output 输入格式: 第一行,一个正整数n. 第二行,n个正整数. 输出格式: 一个正整数,表示最大的整数 输入输出样例 Sample input/output 样例测试点#1 输入样例: 313131

洛谷-牛数-野题

题目描述 Description 我们下面来研究整数性质,我们知道质数只有 1和自身两个因子,合数至少有除了 1和自身的其他因子,我们也知道“猫老大数”是只能分解成两个质数乘积形式的数,那么能分解成两个合数的数呢?我们称之为“牛数”.下面编程判断整数是否为“牛数”. 输入输出格式 Input/output 输入格式:第一行为 t(1<=t<=100),表示测试数据组数. 接下来 t行,每行一个正整数x(1<=x<=10^9)输出格式: 对于每个输入数据 x,判断它是否为“牛数”,并