大数问题(杂记)

前言

大数是一个基本操作,用于大型数据,本代码以斐布纳契数列(兔子繁殖)为例,不了解的自行百度

数据结构

建立一个二维数组备用

int arr[1001][1001];//备用

思想基础

用字符型代替整型,扩充范围

核心代码

void fld() {
   int s, n = 0;//s表示数字,n表示进位
   memset(arr, 0, sizeof(arr));
   arr[1][1] = 1;//第一位为1
   arr[2][1] = 1;//第二位为1
   for (int i = 3; i <= 1000; i++) {//从第三位开始遍历
   	for (int j = 1; j <= 1000; j++) {//位数移动
   		s = arr[i - 2][j] + arr[i - 1][j] + n;//计算当前位的值
   		arr[i][j] = s % 10;
   		n = s / 10//判断是否进位;
   	}
   }
}

核心在于进位制度,通过n完成进位

完整代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int arr[1001][1001];
void fld() {
	int s, n = 0;
	memset(arr, 0, sizeof(arr));
	arr[1][1] = 1;
	arr[2][1] = 1;
	for (int i = 3; i <= 1000; i++) {
		for (int j = 1; j <= 1000; j++) {
			s = arr[i - 2][j] + arr[i - 1][j] + n;
			arr[i][j] = s % 10;
			n = s / 10;
		}
	}
}
int main()
{
	int N;
	fld();
	cin >> N;
	while (N--) {
		int t, m;
		cin >> t;
		for (int i = 1000; i >= 0; i--)
			if (arr[t][i])
				m = i;
		for (int i = m; i > 0; i--)
			cout << arr[t][i];
		cout << endl;
	}
	return 0;
}

总结

大数问题就是补一个遗憾,其实没啥技术含量,就这样。

发布了41 篇原创文章 · 获赞 16 · 访问量 1462

猜你喜欢

转载自blog.csdn.net/weixin_43824551/article/details/102616255
今日推荐