题目描述
某数的平方是7位数,且这7个数字不相同,如1267^2=1605289。 编写程序,输入x,y(1000≤x≤y≤9999)在x~y的范围内找出所有符合条件的数并打印出来。
输入
一行,一个整数。
输出
若干行,每行一个符合条件的数。
样例输入 复制
txt
1000 1025
样例输出 复制
txt
1017
1023
1024
cpp
#include <bits/stdc++.h>
using namespace std;
bool check(int val)
{
int number_count[10] = {0};
int len = 0; //长度
while (val)
{
number_count[val % 10]++; //取出每一位
val /= 10;
len++; //长度增加
}
if (len != 7) return false;
for (int i = 0; i <= 9; i++)
{
if (number_count[i] > 1) //重复了
return false;
}
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int x, y;
cin >> x >> y;
// 计算平方的最小和最大范围
int min_i = ceil(sqrt(1000000)); // 七位数的最小平方根
int max_i = floor(sqrt(9999999)); // 七位数的最大平方根
// 限制范围
x = max(x, min_i);
y = min(y, max_i);
for (int i = x; i <= y; i++)
{
if (check(i * i)) //平方
cout << i << '\n';
}
return 0;
}