问题描述:输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数组也相等)
做这个问题前,我们先考虑一个问题:如何判定一个数是完全平方数?如何表达aabb这个变量?
一.假设一个数是n,我们如何判断它是完全平方数?
第一步:可以求出其平方根,然后看它是否为整数,即用一个int型变量m存储 sqrt(n)四舍五入的结果后的整数。
第二步:判断m的平方是否等于n
注:函数floor(x)表示返回不超过x的最大整数,类似于数学中的取整函数[x],其功能是向下取整。例如 [1.2]=1,[0.9]=0;
二.如何表达aabb这个变量?
我们可以用int n = a*1100+b*11;存储即可!
程序代码如下:
第一种:
#include<stdio.h>
int main()
{
for (int a = 1; a <= 9; a++)
{
for (int b = 0; b <= 9; b++)
{
int n = a * 1100 + b * 11;
int m = floor(sqrt(n) + 0.5);//+0.5是为了保证四舍五入
if (m*m == n)
{
printf("%d\n", n);
}
}
}
return 0;
}
第二种:直接枚举
#include <stdio.h>
int main()
{
for (int x = 1;; x++)
{
int n = x*x;
if (n < 1000)
continue;
if (n > 9999)
break;
int high = n / 100;
int low = n % 100;
if (high / 10 == high % 10 && low / 10 == low % 10)
{
printf("%d\n", n);
}
}
return 0;
}