hdoj 1715 大菲波数

一开始以为简单的通过递推就可以了,但后面发现wa了,查了一下,也才注意到题目很明显的说了大数,所以什么类型都不够用,位数很大。
查了一下,了解到可以用二维数组做,即第一维是控制算到第几个的,第二维用来控制所得数的位数,类似于用手动的方法来计算数列;
代码如下:

#include <stdio.h>
#include <string.h>
int a[1005][1005];
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		int n;
		scanf("%d", &n);
		int c;
		int d = 0;//用来控制位数,并且输出时知道从何输出,此题手动进行运算,每一位数字存在每一个二维数组中,第一维用来控制算得的数,而第二维才是用来存数
		memset(a, 0, sizeof(a));
		a[1][0] = 1;a[2][0] = 1;//第一个和第二个数要先保存下来 
		for (int i = 3;i <= n;i++)//从第三个数开始都是等于前两个数的和 
		{
			c = 0;//保存余数 
			for (int j = 0;j <= d;j++)
			{
				a[i][j] = a[i - 1][j] + a[i - 2][j] + c;//计算结果 
				c = a[i][j] / 10;//将其他的数进位 
				a[i][j] %= 10;//将大于10的数要余数 
			}
			while (c != 0)//最后一位要是大于10,需要进位,并且最高位也需要加1! 
			{
				a[i][++d] = c % 10;
				c /= 10;
			}
		}
		for (int i = d;i >= 0;i--)//输出需要求的数的所有的位所有的值! 
		{
			printf("%d", a[n][i]);
		}
		printf("\n");
	}
	return 0;
}
上一篇:8.25 欢乐emmm赛


下一篇:2019牛客暑期多校训练营(第二场)-H Second Large Rectangle(次大子矩阵,降维,直方图+单调栈)