经典的递推题
不加高精度 60分
a、b、c三个指针同时指向前三个数,c用来记录a+b的和
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
long long a = 1, b =1, c = 1, n;
cin >> n;
for(int i = 2; i <= n; i++){
c = a + b;
a = b;
b = c;
}
cout << c;
return 0;
}
高精度加法
#include <stdio.h>
#include <iostream>
using namespace std;
//初始化数组,相当于将原来数组a,b逆置为10000000000000...
int n, a[5005] = {1}, b[5005] = {1}, c[5005] = {1}, len = 1;
//高精度加法
void add(){
int jw = 0;//进位
for(int i = 0; i < len; i++){//实现低位加法,注意c[i]可存大于10的数
c[i] = a[i] + b[i] +jw;
jw = c[i] / 10;
c[i] = c[i] % 10;
}
//判断最后一位进位
if(jw != 0){
c[len] = jw;
len++;
}
for(int i = 0; i < len; i++){
a[i] = b[i];
b[i] = c[i];
}
}
int main(){
cin >> n;
for(int i = 2; i <= n; i++){
add();
}
for(int i = len - 1; i >= 0; i--){
cout << c[i];
}
return 0;
}