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

back_to_black 2018-06-23 11:02:48
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
我的源代码如下,输出结果为17956,答案是错误的,找不到哪里错了,是不是我的思路有问题?恳请各位前辈指导
public class Zuoye2 {
public static void main(String[] args) {
int a=-1;
while(true) {
a++;
//利用sqrt(a)返回一个double类型的平方根,然后强制转为int类型,目的是只保留整数部分,然后平方,平方后的值如果和a相等,a即为所求
boolean m,n;
m=(int)Math.sqrt(a+100)*(int)Math.sqrt(a+100)==a;
n=(int)Math.sqrt(a+100+168)*(int)Math.sqrt(a+100+168)==a;
if(m&&n) {
break;
}

}
System.out.println(a);
}
...全文
933 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2018-06-29
  • 打赏
  • 举报
回复
引用 12 楼 back_to_black 的回复:
[quote=引用 9 楼 nayi_224 的回复:]
效率之前先保证准确率吧,正确答案156

正确答案应该是21,老哥你看一下是不是你写错了。[/quote]

恩,少看了一个“再”字。不过正确答案也不只是21 。
public static void main(String[] args) {
// TODO Auto-generated method stub
double i = 0;
while(++i > 0 && i < 10000)
if(Math.abs(Math.pow((int)Math.sqrt(i * i + 168d), 2) - (i * i + 168d)) < 0.00001d)
System.out.println("num = " + (i * i - 100));
}

而是这4个吧
num = -99.0
num = 21.0
num = 261.0
num = 1581.0
back_to_black 2018-06-28
  • 打赏
  • 举报
回复
引用 9 楼 nayi_224 的回复:
效率之前先保证准确率吧,正确答案156

正确答案应该是21,老哥你看一下是不是你写错了。
back_to_black 2018-06-28
  • 打赏
  • 举报
回复
引用 7 楼 bbjiabcd 的回复:
LZ的写法看着难受,重复计算,效率不高,总想自己写个

public class GetNum {
public static void main(String[] args){
int j,k;
for (int i=0;;i++)
{
j=(int)Math.sqrt(i+100);
k=(int)Math.sqrt(i+268);
if (j*j==i+100 && k*k==i+268)
{
System.out.println(i);
break;
}
}
}
}

嗯嗯,我是初学者,以后一定注意格式和书写的逻辑,争取写得越来越好。加油
bbjiabcd 2018-06-25
  • 打赏
  • 举报
回复
结果为:21
bbjiabcd 2018-06-25
  • 打赏
  • 举报
回复
LZ的写法看着难受,重复计算,效率不高,总想自己写个

public class GetNum {
public static void main(String[] args){
int j,k;
for (int i=0;;i++)
{
j=(int)Math.sqrt(i+100);
k=(int)Math.sqrt(i+268);
if (j*j==i+100 && k*k==i+268)
{
System.out.println(i);
break;
}
}
}
}
nayi_224 2018-06-25
  • 打赏
  • 举报
回复
public static void main(String[] args) {
// TODO Auto-generated method stub
double i = 0;
while(++i > 0)
if(Math.pow((int)Math.sqrt(i * i + 68), 2) == (i * i + 68))
break;
System.out.println(i * i - 100);
}
nayi_224 2018-06-25
  • 打赏
  • 举报
回复
效率之前先保证准确率吧,正确答案156
八位比特 2018-06-23
  • 打赏
  • 举报
回复
引用 3楼我是你的主体 的回复:
[quote=引用 1 楼 weixin_42118643 的回复:]
a加100开根号乘以a加100开根号为什么要全等于a而不是全等于a加100呢?

可以了。老哥,我下面少加了一个,我的错,谢谢老哥。thank you[/quote]不用客气,我也是在学习
八位比特 2018-06-23
  • 打赏
  • 举报
回复
引用 4楼weixin_42118643 的回复:
不会打印出结果就说明你打印结果的前面语句有错误,你前面语句不能导致出打印结果的也就只有那个if语句了。你的逻辑是如果m为真并且n为真那么我就打印出结果并且跳出循环。但是你的代码是如果m为真并且n为真那么我就跳出循环然后我啥事都不干了。你应该把syso放在break前面
而且我发现你的syso放错位置了好像放在main方法外面
八位比特 2018-06-23
  • 打赏
  • 举报
回复
不会打印出结果就说明你打印结果的前面语句有错误,你前面语句不能导致出打印结果的也就只有那个if语句了。你的逻辑是如果m为真并且n为真那么我就打印出结果并且跳出循环。但是你的代码是如果m为真并且n为真那么我就跳出循环然后我啥事都不干了。你应该把syso放在break前面
back_to_black 2018-06-23
  • 打赏
  • 举报
回复
引用 1 楼 weixin_42118643 的回复:
a加100开根号乘以a加100开根号为什么要全等于a而不是全等于a加100呢?

可以了。老哥,我下面少加了一个,我的错,谢谢老哥。thank you
back_to_black 2018-06-23
  • 打赏
  • 举报
回复
引用 1 楼 weixin_42118643 的回复:
a加100开根号乘以a加100开根号为什么要全等于a而不是全等于a加100呢?

是的,是我理解错误了,可是加完之后还是不对,运行不会打出任何结果,也没有报错
八位比特 2018-06-23
  • 打赏
  • 举报
回复
a加100开根号乘以a加100开根号为什么要全等于a而不是全等于a加100呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧