小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169也有这个性质,我们权且称它们为:拼接平方数。100可拆分1 00,这有点勉强,我们规定,0 00 000 等都不算平方数。小明想:还有哪些数字是这样的呢?
你的任务出现了:找到某个区间的所有拼接平方数。
【输入】
两个正整数 a b (a<b<10^6)
【输出】
若干行,每行一个正整数。表示所有的区间[a,b]中的拼接平方数
样例输入:
1 200
样例输出:
49
169
样例输入:
169 10000
样例输出:
169
361
1225
1444
1681
3249
4225
4900
9025
#include<stdio.h>
#include<math.h>
bool check(int a) {
int t=(int)sqrt(a);
if(t*t==a)return 1;
return 0;
}
bool check2(int a) {
int v=a;
int t1=0,t2=0,flag[8],i=0;
while(a!=0){
flag[i]=a%10;
a/=10;
i++;
}
for(int j=i-1; j>0; j--) {
t1+=flag[j];
if(!check(t1)) {
t1*=10;
continue;
}
for(int k=j-1; k>=0; k--) {
t2+=flag[k];
if(k==0)continue;
t2*=10;
}
if(t2==0) continue;
if(check(t2))return true;
t2=0;
t1*=10;
}
return false;
}
int main() {
int a,b;
scanf("%d%d",&a,&b);
for(int i=a; i<=b; i++)if(check2(i)&&check(i)) printf("%d\n",i);
return 0;
}