郑州大学第八届ACM大学生程序设计竞赛正式赛
C.斐波那契数
Description
xq最近迷恋上了斐波那契数列,因为当n趋向于无穷大时,后一项与前一项的比值越来越逼近黄金分割0.618。不过令xq不开心的是,斐波那契数的增长速度太快了,以至于当n很大时,用计算机中的32位整数甚至64位整数都已经不能表示这个数了。基于这个原因,xq遇到了这个难题,xq想要知道第K(0<=K<=10^10000)项斐波那契数是奇数还是偶数,因为K太大了,xq不知道怎么解决这个问题,现在xq想让你解决这个问题。斐波那契数列是如下的一个数列,0,1,1,2,3,5……,其通项公式为F(n)=F(n-1)+F(n-2),(n>=2) ,其中F(0)=0,F(1)=1。
Input
第一行,T,表示有1<=T<100个测试样例。
接下来T行,每行一个数据K(0<=K<=10^10000),表示要判定的是哪一项。
Output
如果第K项是偶数,输出YES,否则输出NO。
Sample Input
2
1
Sample Output
YES
NO
思路:就是一道找规律题,把斐波那契数列列出来后会发现,序号只要是3的倍数就是偶数,那题目就变成了判断给的数字是不是3的倍数,题目给的10^10000,这其中有一个小结论,如果一个很大的数字,把它的各个位数相加如果是三的倍数,那么这个数就是3的倍数,一下子题目就简单躲了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main() {
int t;
scanf("%d", &t);
while(t--){
char str[];
scanf("%s", str);
int len = strlen(str);
int sum = ;
for(int i = ; i < len; i++){
sum += str[i]-'0';
}
if(sum% == ) printf("YES\n");
else printf("NO\n");
}
return ;
}