题解 | #自守数#

自守数

http://www.nowcoder.com/practice/88ddd31618f04514ae3a689e83f3ab8e

先求出SIZE内所有的自守数,再查表寻找即可
#include <stdio.h>
#include <string.h>

#define SIZE 10000
int arr[100];    //自守数数组

void getnum(int size);
int checknum(int num);

int main(void)
{
    getnum(SIZE);
    int num;
    
    while(scanf("%d",&num)!=EOF){
        printf("%d\n",checknum(num));
    }
    
    return 0;
}

void getnum(int size)
{
    int i,j,tmp;
    
    arr[0] = 1,arr[1] = 5,arr[2] = 6;    //前四个自守数易得
    for(i=7,j=3;i<=SIZE;i++){
        if(i<10) tmp = 10;
        else if(i<100) tmp = 100;
        else if(i<1000) tmp = 1000;
        else if(i<10000) tmp = 10000;
        else tmp = 100000;
        if((i*i - i) % tmp == 0){
            arr[j++] = i;    //记录自守数
        }
    }
}

int checknum(int num)
{
    int i = 0;        //因为要判断0,所以自守数数组内没有0,输出要+1多一个
    while(num >= arr[i] && arr[i]!=0) i++;
    return i+1;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务