A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄小贝 高级黑马   /  2012-10-22 00:46  /  2838 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

饭后一道题,天天好心情~

题目一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

今天这道题有点意思,关键就在于开方算法的实现~~





结果为 156
  1. package day6;

  2. /**
  3. * 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  4. *
  5. * @author yellowbaby
  6. *
  7. */
  8. public class Test {

  9.         public static void main(String[] args) {

  10.                 for (int i = 0; i < 1000000; i++) {
  11.                         if (isSquareNum(i + 100) && isSquareNum(i + 168)) {
  12.                                 System.out.println(i);
  13.                                
  14.                         }
  15.                 }
  16.         }

  17.         /**
  18.          * 用Math类判断num是否能被开方
  19.          */
  20.         private static boolean isSquareNum(int num) {

  21.                 Double sqrtNum = Math.sqrt(num);

  22.                 if (sqrtNum.intValue() == sqrtNum) {
  23.                         return true;
  24.                 }
  25.                
  26.                 return false;
  27.         }

  28.         /**
  29.          * 不用Math类判断num是否能被开方
  30.          */
  31.         private static boolean isSquareNum2(int num) {

  32.                 int i = 0;

  33.                 while (i * i < num) {
  34.                         i++;
  35.                 }

  36.                 if (i * i == num) {
  37.                         return true;
  38.                 }

  39.                 return false;
  40.         }
  41. }
复制代码
做完后,瞄了一眼答案,发现Math类有更强大的方法,只是我一直在想如何开方,没有想过可以算n次方。。





评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
{:soso_e114:}牛啊!!!
回复 使用道具 举报
有一点不明白,如果算N次方来做这道题的话,这里的while(a<10000),这里的a为什么要小于10000呢?
回复 使用道具 举报
李贺晓 发表于 2012-10-22 11:44
有一点不明白,如果算N次方来做这道题的话,这里的while(a

额,这里我没有去多想,原本我后面的0还多些,弄一个足够大的数就行,而且目测条件的数肯定不会很大,因为当 i 比较大以后, (i+1)的平方 - i 的平方 肯定大于 168
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马