题解 | 自守数

#include <cmath>
#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;

    // 找规律 :
    // 例如 25 * 25 - 25 = 600
    // 600 % 10^2 == 0 
    // 2 表示 25 转成string的长度
    // 满足 (i * i - i) % pow(10, to_sting(i).size()) 自守数个数 + 1 

    // 特例 0 和 1
    // 0 * 0 - 0 = 0  自守数个数直接 + 1
    // 1 * 1 - 1 = 0
    int temp;
    int count = 0;
    for (int i = 0; i <= n; i ++) {
        temp = i * i - i;
        int len = to_string(i).size();
        if (len == 1 && temp == 0) {
            count ++;
        } else {
            if (temp % int(pow(10, len)) == 0) {
                count ++;
            }
        }
        
    }

    cout << count << endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

02-18 13:28
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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