数位计数问题

数位计数

时间限制1.0s   内存限制256.0MB

问题描述

给定两个正整数 n 和 m,请问在整数 1 至 n 中,各位数字的平方和为 m 的总共有多少个?

例如,当 n=100,m=5 时,只有 12 和 21 各位数字的平方之和为 5,所以答案为 2。

输入格式

输入的第一行包含两个整数 n 和 m,用一个空格分隔。

输出格式

输出一行包含一个整数,表示答案。

样例输入   

100 5

样例输出   

2

评测用例规模与约定

对于 40% 的评测用例,1 <= n <= 1000,1 <= m <= 1000。

对于 100% 的评测用例,1 <= n <= 1000000,1 <= m <= 1000。

题解部分:

这个问题可以使用循环枚举 1 到 n 中的每个数字,计算其各位数字的平方和是否等于 m。如果等于 m,则计数器加 1。最终得到的计数器的值即为答案。

#include <iostream>
#include <string>

using namespace std;

int square_sum(int n, int m) {
    int count = 0;
    for (int i = 1; i <= n; i++) {
        string digits = to_string(i);
        int square_sum = 0;
        for (char d : digits) {
            int digit = d - '0';
            square_sum += digit * digit;
        }
        if (square_sum == m) {
            count++;
        }
    }
    return count;
}

int main() {
    int n;
    int m;
    cin >> n >> m;
    cout << square_sum(n, m);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/FlyFree56/article/details/130783083