用C++编程求出一个四位完全平方数,前两个数字相同,后两个数字相同。

该怎么做?麻烦大神写下详细步骤...... 该怎么做?麻烦大神写下详细步骤... 展开
 我来答
czy7812
2017-07-04 · TA获得超过2668个赞
知道小有建树答主
回答量:518
采纳率:88%
帮助的人:186万
展开全部
【解题思路】
一个数若能表示成某个整数的平方的形式,则称这个数为完全平方数。比如: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的平方。具体截图如下:

cdyzxy
2014-03-31 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3661万
展开全部
#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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xxiiaaoosshhuu
2014-03-31 · TA获得超过165个赞
知道答主
回答量:95
采纳率:0%
帮助的人:32.6万
展开全部
#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);
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-03-31 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6495万
展开全部
不应该很复杂——
//#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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sitanfufly
2014-03-31 · TA获得超过232个赞
知道小有建树答主
回答量:437
采纳率:0%
帮助的人:249万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式