nyoj-655-光棍的yy(大数)

光棍的yy

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述

yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊

现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??

例如(111  可以拆分为 111 12 21  有三种)

输入
第一行输入一个n表示有n个测试数据

以下n行,每行输入m个1

(1 <= n,m <= 200)

输出
输出这种组合种数,占一行
样例输入
3
11
111
11111
样例输出
2
3
8

解题思路

通过实验前几组数据可以发现,这个题是斐波那契数列,但是最多有200个1,明显超过int范围,所以需要用到大数。

大数运算,又称高精度运算,最常用的是利用数组,数组每一位存储大数的每一位,但是要注意是否进位,而且要注意方向。

代码

#include<stdio.h>
#include<string.h>
int num[210][52];
char s[210];
void sum(int n,int m)
{
	int i=50;
	while(i--)
	{
		num[m][i]=num[n][i]+num[n-1][i];
	}
	for(i=0;i<=50;i++)
	    if(num[m][i]>9)//判断是否进位,用x>9或x/10>0
	    {
	    	num[m][i+1]+=num[m][i]/10;
	    	num[m][i]%=10;
	    }
}
int main()
{
	int n,m;
	int i,j;
	memset(num,0,sizeof(num));//初始化数组
	num[1][0]=num[0][0]=1;
	for(i=1;i<=200;i++)
	    sum(i,i+1);
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s",s);
		m=strlen(s);
		for(i=50;i>=0;i--)
		    if(num[m][i]!=0)
		        break;
		for(;i>=0;i--)
		    printf("%d",num[m][i]);
		printf("\n");
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 05:27:43

nyoj-655-光棍的yy(大数)的相关文章

NYOJ 655 光棍的yy

光棍的yy 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊. 现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种?? 例如(111  可以拆分为 111 12 21  有三种) 输入 第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 <= n,m <= 200) 输出 输出这种组合种数,占一行 样例输入 3 11 111 11111 样

nyoj 655光棍的yy

光棍的yy 时间限制:1000 ms  |            内存限制:65535 KB 难度:2 描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊. 现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种?? 例如(111  可以拆分为 111 12 21  有三种) 输入 第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 <= n,m <= 200) 输出 输出这种组合种数,占一行 样例输入 3 11 1

nyoj655 光棍的yy(大数的斐波那契数)

题目655 题目信息 运行结果 本题排行 讨论区 光棍的yy 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊. 现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种?? 例如(111  可以拆分为 111 12 21  有三种) 输入 第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 <= n,m <= 200) 输出 输出这种组合种数,

南阳 655 光棍的yy

光棍的yy 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊. 现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种?? 例如(111  可以拆分为 111 12 21  有三种) 输入 第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 <= n,m <= 200) 输出 输出这种组合种数,占一行 样例输入 3 11 111 11111 样

NYOJ 光棍的yy

光棍的yy 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊. 现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种?? 例如(111  可以拆分为 111 12 21  有三种) 输入 第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 <= n,m <= 200) 输出 输出这种组合种数,占一行 样例输入 3 11 111 11111 样

Nyoj 114 某种序列(大数)

某种序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 A2, 计算A99 输入 输入包含多行数据 每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000) 数据以EOF结束 输出 对于输入的每一行输出A99的值 样例输入 1 1 1 样例输出 69087442470169316923566147 #inc

nyoj 458-小光棍数 (471)

458-小光棍数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:6 提交数:6 难度:1 题目描述: 最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少? 输入描述: 有多组测试数据.第一行一个整数n,表示有n组测试数据.接下来的每行有一个整数m. 输出描述: 输出第m个小光棍数. 样例输

nyoj 517 最小公倍数 【java大数】

我自己写了一个gcd TL了,然后调用了math里面的gcd,AC了... 思路:就是拿n前面的最小公倍数和n求 1~n的最小公倍数 代码: import java.util.Scanner; import java.math.*; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); BigInteger[] s = new BigInteger[102]

大数常用计算模板及例题

一.模板&例题 [两个大数相加] string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=temp; } int i,j; for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) { s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); //注意细节 if(s1[i]-'0'>=10)