//值得注意的是,这段代码写于学习的早期时段,对语言和编译器的理解并不充分,为了装B使用了位异或的交换写法。emon的这篇文章里有写到这样做的劣处,如果有幸看到这个,可以前往学习一波。
#include<stdio.h>
long s[1200];
int main(){
long n,a=2,b=3;
s[0] = 0;
s[1] = 1;
s[2] = 2;
for(n=3;n<1200;++n){
a ^= b;
b ^= a;
a ^= b;
b += a;
b %= 32767;
s[n] = b-1;
if(s[n]<0){
s[n] = 32766;
}
}
while(scanf("%ld",&n)!=-1)
{
n %= 1200;
printf("%ld\n",s[n]);
}
}
《NOJ1185 数列之和》有1个想法