三.刷题.2

题目: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值