题意:
一个数,为平方数,其拆分为两部分(不可同时为0)后仍为平方数
输出【a,b】中所有满足的数
关键在于:判断一个数是否为平方数->开方后的数是否为整数
floor(sqrt(n) + 0.5) == sqrt(n)
floor()为向下取整函,一个数字开方后加上0.5后向下取整,如果等于其开方后的自己,则自己的开方数字为整数。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int a,b;
int lenth(int n)
{
int len = 0;
while (n)
{
n /= 10;
len ++;
}
return len;
}
bool check(int n)
{
if(n < 10) return false;
if(floor(sqrt(n) + 0.5) != sqrt(n)) return false;
int l, r; // 左右两部分的数字
int len = lenth(n);
while(len >= 2)
{
l = n / (pow(10, len - 1));
r = n % (int)(pow(10, len - 1));
if(l != 0 && r != 0 && floor(sqrt(l) + 0.5) == sqrt(l)
&& floor(sqrt(r) + 0.5) == sqrt(r))
return true;
len --;
}
return false;
}
int main()
{
cin>>a>>b;
for(int i = a; i <= b; i ++)
if(check(i)) cout<<i<<endl;
return 0;
}
写的时候卡住了,因此
思路参考于:csdn–指北针_N