#include<iostream>
#include<cmath>
using namespace std;
bool judge(float s)
{
int k=s;
if(k-s==0) return true;
return false;
}
int main()
{
int ans[90];
int num=0;
for(int i=1;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
int k=i*100+i*1000+j+j*10;
float s=sqrt(k);
if(judge(s)) {ans[num]=k;num++;}
}
}
for(int i=0;i<num;i++)
cout<并雀樱手<ans[i]<<' ';
cout<<endl;
return 0;
}
展开全部
1234567891011121314151617181920212223【解题思路】一个数若能表示成某个整数的平方的形式,则称这个数为完全平方数。比如:0,1,4,9,16,25,……。本题有两个关键点:第一个是找出四位数的完全平方数;第二个是判断这个完全平方数是不是前两位相同,并且后两位也相同。第一个问题比较简单,四位数是从1000到9999之间,但是不需要从1000开始一个一个去判断是否完全平方数,这样做要检测9000个,每个数还要看看是不是完全平方数,计算量梁孙春很大。事实上只需要从32开始到99,逐个取平方就可以得到所有四位数的完全平方数。(因为31的平方是三位数,而100的平方是五位数,所以只需要凯运在32到99的平方数中一个个找下去就可以了)。第二个问题可以巧妙利用C语言中的取余运算符%和整型变量除法规则来实现。比如要对1234进行上述比较,可以先把1234分成两截,办法如下:int a=1234/100;int b=1234%100;因为C语言中整数除法会自动忽略小数部分,所以int a=1234/100的结果就是a=12;而取余运算符是得到余数,所以int b=1234%100的意思就是1234除以100的余数,结果就是b=34,这样就成功把1234分成12和34两段,然后再分别判断a和b个位和十位是否相同就可以了。判断的方法如下:if(a/10==a%10),因为a/10会得到a的十位数,而a%10会得到a的个位数,所以只要这两个相等,就说明a的个位和十位相同,因此上题的具体代码如下: 【程序代码】#include <iostream> //控制台操作头文件 int main() //主函数{int i,a,b; //整型变量 printf("前两位和后两位分别相同的四位完全平方数有:"); for(i=32;i<100;i++) //通过循环逐个检测四位数完全平方数 {a=(i*i)/100; 橡耐 //得到完全平方数的前两位 b=(i*i)%100; //得到完全平方数的后两位 if(a/10==a%10&&b/10==b%10) //如果前两位和后两位分别相同 printf("%d(%d的平方)",i*i,i);}//输出这个四位数的完全平方数 printf("\n"); //换行 system("PAUSE"); //屏幕暂停,以便看到显示结果 return 0;} //结束程序 【运行结果】以上程序在DEV C++中运行通过,运行结果是只有7744这个数符合要求,它是88的平方。具体截图如下: