黑马程序员技术交流社区

标题: Java基础算法题(第六天) [打印本页]

作者: 黄小贝    时间: 2012-10-22 00:46
标题: Java基础算法题(第六天)
饭后一道题,天天好心情~

题目一个整数,它加上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次方。。






作者: 马长江    时间: 2012-10-22 09:07
{:soso_e114:}牛啊!!!
作者: 李贺晓    时间: 2012-10-22 11:44
有一点不明白,如果算N次方来做这道题的话,这里的while(a<10000),这里的a为什么要小于10000呢?
作者: 黄小贝    时间: 2012-10-22 13:39
李贺晓 发表于 2012-10-22 11:44
有一点不明白,如果算N次方来做这道题的话,这里的while(a

额,这里我没有去多想,原本我后面的0还多些,弄一个足够大的数就行,而且目测条件的数肯定不会很大,因为当 i 比较大以后, (i+1)的平方 - i 的平方 肯定大于 168




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2