数位计数
时间限制: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;
}