题目:7744问题:
输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。
注意:a的范围是1~9,但b可以是0.
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,a,b;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
{
n = a*1100 + b*11;
m = floor(sqrt(n) + 0.5);
if(m*m == n)
printf("%d\n",&n);
}
return 0;
}
思路:
1.本题要用到循环嵌套。
2.要把aabb这个完全平方数以C语言的形式表达出来,所以要定义一个变量使它等于a1100+b11.
3.要用到开平方函数sqrt()求出这个数的平方根,看他是否为整数,然后再判断它的平方是否等于原来的数。
问题:1.没有用到floor函数返回不超过x的最大整数。
2.没有注意浮点数的误差的影响。为了减小误差,要改为四合五入,即floor(x+0.5)
其意思为在区间中移动0.5个单位的距离,是范围趋于更小的误差之间。
资料中给出了枚举平方根x,从而避免开平方的操作
#include<stdio.h>
int main()
{
for(int x = 1; ;x++)
{
int n = x*x;
if(n<1000) continue;
if(n>9999) break;
int hi = n/100;
int lo = n%100;
if(hi/10 == hi%10&&lo/10 ==lo&10)
printf("%d\n",n);
}
return 0;
}