高精+递推,但是就是最后一个点出了问题
  • 板块P1255 数楼梯
  • 楼主njuptxzy
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/7/11 18:47
  • 上次更新2024/7/11 20:01:06
查看原帖
高精+递推,但是就是最后一个点出了问题
1090625
njuptxzy楼主2024/7/11 18:47
//使用高精度来进行求解
#include<iostream>
#include<cstring>
using namespace std;
struct big_num{
	int a[10005];//用来储存大数字 
	int len;//这个大数字的长度 
	big_num(int x=0){//默认值为0 
		memset(a,0,sizeof(a));//初始化这个数组 
		for(len=1;x;len++){
			a[len]=a[len]+x%10;
			x/=10;
		}
		len--;
	}
	int &operator[](int i){//重载了一下这个[]使得c[2]=c.a[2]; 
		return a[i];
	}
	void flatten(int L){
		len=L;
		for(int i=1;i<=len;i++){
			a[i+1]+=a[i]/10;
			a[i]%=10;
		}
		for(;!a[len];) len--;
	}
	void print(){
		for(int i=len;i>=1;i--){
			cout<<a[i];
		}
	}
}; 
big_num operator +(big_num a,big_num b){
	big_num c;
	int len=max(a.len,b.len);
	for(int i=1;i<=len;i++)
	{
		c[i]+=a[i]+b[i];
	}
	c.flatten(len+1);
	return c;
}
int main(){
	int n;
	cin>>n;
	big_num a[n+1];//用来储存每一步数量的大小 
	a[1]=big_num(1);
	a[2]=big_num(2);
	for(int i=3;i<=n;i++)
	{
		a[i]=a[i-2]+a[i-1];
	}
	a[n].print() ;
	return 0;
}

感觉就是一个正常的高精度思路?但是过不了最后一个数据点……

2024/7/11 18:47
加载中...