本文共 1685 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要判断给定的数字是否是某个 N 的 N-自守数。N-自守数的定义是:某个数 K 满足 N × K² 的结果的末尾几位数等于 K。
#include#include using namespace std;int main() { int m; cin >> m; for (int k = 0; k < m; ++k) { int K; cin >> K; int d = 0; int temp = K; while (temp > 0) { d++; temp /= 10; } string K_str = to_string(K); bool found = false; int min_N = -1; long long min_product = -1; for (int N = 1; N <= 9; ++N) { long long product = (long long)N * K * K; int mod = 1; for (int i = 0; i < d; ++i) { mod *= 10; } int last_part = product % mod; char buffer[d + 1]; snprintf(buffer, d + 1, "%0" + string(d, '0') + "%d", last_part); string last_str(buffer); if (last_str == K_str) { found = true; min_N = N; min_product = product; break; } } if (found) { cout << min_N << " " << min_product << endl; } else { cout << "No" << endl; } } return 0;}
这种方法确保了我们能够高效地判断每个数字是否是某个 N 的 N-自守数,满足了题目的要求。
转载地址:http://lymaz.baihongyu.com/