step3_数据结构_ACM大数 HDU1715 大菲波数【大数】

http://acm.hdu.edu.cn/showproblem.php?pid=1715

记得打表!!!

#include<string>
#include<cstdio>
#include<iostream>
#include<sstream>
using namespace std;
string as[1005];
void bu0(string& a,string& b,bool flag){
	//对a b补零
	//flag为true 前补零 , 否则后补零 
	int len=a.length()>b.length()?a.length():b.length(); 
	if(flag){
		while(a.length()!=len){
			a="0"+a;
		}
		while(b.length()!=len){
			b="0"+b;
		}
	}else{
		while(a.length()!=len){
			a+="0";
		}
		while(b.length()!=len){
			b+="0";
		}
	}
} 
void madd(string a,string b,string&ans){
	//将字符串a与b相加
	//返回值存于ans(答案)   c进位,
	int c;
	bu0(a,b,true);
	c=0;ans="";
	int len=a.length();
	for(int i=len-1;i>=0;i--){
		int aa=a[i]-'0';
		int bb=b[i]-'0';
		int x=(aa+bb+c)%10;
		ans=(char)(x+'0')+ans;
		c=(aa+bb+c)/10;
	}
	//对进位处理与否,在下 
	if(c!=0)ans=(char)(c+'0')+ans;
}
int main(){	
	as[1]=as[2]="1";
	string a="1";
	string b="1";string c;
	for(int i=3;i<=1000;i++){
		madd(a,b,c);
		a=b;b=c;
		as[i]=c;
	}	
	int n;cin>>n;
	while(n--){
		int k;cin>>k;
		cout<<as[k]<<endl;
	}
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值