题目描述
小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169也有这个性质,我们权且称它们为:拼接平方数。
100可拆分1 00,这有点勉强,我们规定,0 00 000 等都不算平方数。
小明想:还有哪些数字是这样的呢?
你的任务出现了:找到某个区间的所有拼接平方数。
输入
两个正整数 a b (a<b<10^6)
输出
若干行,每行一个正整数。表示所有的区间[a,b]中的拼接平方数
样例输入
1 200
样例输出
49 169
#include<bits/stdc++.h>
using namespace std;
const int N = 105;
int numLenth(int n)//求出位数
{
int cnt = 0;
while(n)
{
cnt++;
n/=10;
}
return cnt;
}
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if((int)sqrt(i)!=sqrt(i)) continue;//判断是否整数开方
if(i<=10) continue;
int l_num,r_num;//l存左边的数,r存右边的数
int len = numLenth(i);
while(len>1)
{
double x = pow(10,len-1);
l_num = i/x;
r_num = i%(int)x;
if(l_num!=0&&r_num!=0&&(int)sqrt(l_num)==sqrt(l_num)&&(int)sqrt(r_num)==sqrt(r_num))//满足题意
{
cout<<i<<endl;
break;
}
len--;
}
}
return 0;
}