Problem 1049 - 斐波那契数

/*

Problem 1049 - 斐波那契数 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty:
Total Submit: 1383  Accepted: 289  Special Judge: No Description  
Description      
斐波那契数列是如下的一个数列,0,1,1,2,3,5……,其通项公式为F(n)=F(n-1)+F(n-2),(n>=2) ,其中F(0)=0,F(1)=1,你的任务很简单,判定斐波契数列的第K项是否为偶数,如果是输出YES,否则输出NO
Input第一行,T,表示有T个测试样例。
接下来T行,每行一个数据K(0<=K<=10^10000),表示要判定的是哪一项。Output如果第K项是偶数,输出YES,否则输出NO。
Sample Input
2
0
1
Sample Output
YES
NO

*/

这个一看数据10的10000次方,放心吧,肯定大数!然后先别急着递推的(大数斐波那契稍微麻烦点),根据小学学的知识我们可以肯定:每三个数出现一个偶数。这个很好证明。而且第一个数还是第0项。这就更好说了,第0,3,6,9……项为偶数。准备写大数除法。但是先别急,再想想,小学还学了个如果一个数的各位数字之和能被3整除,则这个数能被3整除。10的10000次方,10000位,都是10以内的数加起来不超过100000,int就能存下了。

ps:①如果一个数的末两位数能被4或25整除,那么这个数就一定能被4或25整除。

      ②百位、个位和十位所组成的三位数能被8整除,则这个数能被8整除。

       ③各个数位上的数字和能被9整除,则这个数能被9整除。

#include<stdio.h>
#include<string.h>
char s[10010];
int main()
{
    int n,i,sum,len;
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
            sum=0;
            scanf("%s",s);
            len=strlen(s);
            for(i=0;i<len;i++)
                sum+=s[i]-'0';
            if(sum%3==0) printf("YES\n");
            else printf("NO\n");
        }
    }
    return 0;
}

posted @ 2013-08-07 22:40  hjf007  阅读(249)  评论(0编辑  收藏  举报