7个回答
展开全部
【解题思路】
一个数若能表示成某个整数的平方的形式,则称这个数为完全平方数。比如: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的平方。具体截图如下:
展开全部
#include<math.h>
#include<iostream>
void main()
{ int i,j,k,m;
for ( i=1;i<10;i++ ) //前两位数取值1~9才能保证4位数
for ( j=0;j<10;j++ ) //后两位数可取值0~9
{ k=i*1000+i*100+j*10+j;
m=sqrt((double)k);
if ( m*m==k ) cout<<k<<"="<<m<<"*"<<m<<endl;
}
}
7744=88*88
#include<iostream>
void main()
{ int i,j,k,m;
for ( i=1;i<10;i++ ) //前两位数取值1~9才能保证4位数
for ( j=0;j<10;j++ ) //后两位数可取值0~9
{ k=i*1000+i*100+j*10+j;
m=sqrt((double)k);
if ( m*m==k ) cout<<k<<"="<<m<<"*"<<m<<endl;
}
}
7744=88*88
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
for(int i=1;;i++)
{
if(i*i<1000)
continue;
if(i*i>9999)
break;
//保证m是四位数
int m=i*i;
if(m/1000==m%1000/100&&m%100/10==m%10)//判断m是否符合要求
printf("%d\n",m);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不应该很复杂——
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
int i,m;
for(i=32;i<100;i++)
if((m=i*i)/1000==m/100%10 && m/10%10==m%10)
printf("%d\n",m);
}
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
int i,m;
for(i=32;i<100;i++)
if((m=i*i)/1000==m/100%10 && m/10%10==m%10)
printf("%d\n",m);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int i,j;
for(i=1000;i<=9999;i++)
{
j=sqrt((double)i);//这步是关键,
if(j*j==i)
{
if(i%10==(i/10)%10)//个位和十位
if(i/1000==(i/100)%10)//千位和百位
cout<<i<<" "<<j<<endl;;
}
}
return 0;
}
#include<cmath>
using namespace std;
int main(){
int i,j;
for(i=1000;i<=9999;i++)
{
j=sqrt((double)i);//这步是关键,
if(j*j==i)
{
if(i%10==(i/10)%10)//个位和十位
if(i/1000==(i/100)%10)//千位和百位
cout<<i<<" "<<j<<endl;;
}
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询