HJ99 自守数(c++)

题目链接:自守数_牛客题霸_牛客网

注意点:

参考了评论区大佬的方法,简洁易懂

1.首先0必定是自守数,算作初始为1。我们可以遍历1到n验证每个数i是否是自守数。

2.如果它是自守数,那么i^2对i这么多位零的整十整百或者整千整万数取余就会得到i本身

3.我们可以在遍历的时候初始取模为10,每当i等于模将其扩大十倍即可。

#include 
using namespace std;

int main(){
    int n ;
    int tmp = 1;
    int base = 10;
    while(cin >> n){
        for(int i = 1; i <=n ; ++i){
            int sq = i * i;
            //保证取余的位数和i一致
            if(i == base) base *= 10;
            //取余后是否和i相等
            if (sq % base == i) tmp++;
        }
           cout << tmp << endl; 
    }
    return 0;
}

你可能感兴趣的:(牛客网_华为机试,华为机试)