#include<bits/stdc++.h>
using namespace std;
long long math(int a)
{
if(a <= 2){
return 1;
}
long long f0 = 1,f1 = 1,f2;
for(int i = 3;i <= a;++ i){
f2 = f1 + f0;
f0 = f1;
f1 = f2;
}
return f2;
}
int main()
{
int n,a;
scanf("%d",&n);
for(int i = 1;i <= n;++ i){
scanf("%d",&a);
printf("%lld\n",math(a) % 1000);
}
return 0;
}
当a大到2000左右的时候,long long也会爆掉,所以不能在结果处取模。
那么我们就在运算过程中取,也就是f2 = f1 + f0这个时候。想明白了一件事情,就是对于加法运算来讲,运算过程中取模是无所谓的,本质上就是结果要留那几位在运算的数。
#include<bits/stdc++.h>
using namespace std;
int math(int a)
{
if(a <= 2){
return 1;
}
int f0 = 1,f1 = 1,f2;
for(int i = 3;i <= a;++ i){
f2 = (f1 + f0) % 1000;
f0 = f1;
f1 = f2;
}
return f2;
}
int main()
{
int n,a;
scanf("%d",&n);
for(int i = 1;i <= n;++ i){
scanf("%d",&a);
printf("%d\n",math(a));
}
return 0;
}
这下long long也能改int了