这题有人会解码?我是新生。

题目描述

若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。 例如9=33,16=44(也可以表达成√9=3,√16=4),所以9和16是完全平方数。输入一个正整数n,判断是否为完全平方数。

输入格式

输入一个正整数n。

输出格式

输出“yes”或“no”,表示是否为完全平方数

以下文本如何改正?
#include
#include
#include
#include
using namespace std;

int main(){
int a,b;
cin>>b;

if(sqrt(b)==a){
	cout<<"yes";
} 
else{
	cout<<"no";
}
return 0;

}

3 个赞

int a,b;
a是干什么的?

2 个赞

a是b的平方根(我不确定这样写对不对)

2 个赞

b这个树开方之后得到一个整数才是完全平方数。

2 个赞

那你a赋值了么

5 个赞

不是哥们 a你没赋值

2 个赞

是数

2 个赞

谢谢,原来我错在这了

2 个赞

一个数的平方根取整的平方是这个数,则这个数是平方数。
核心代码:

int(sqrt(a))*int(sqrt(a))==a
4 个赞

改一下:@ 徐熙喆

if(a*a==b){
	cout<<"yes";
}
3 个赞

a没有赋值啊。
可以先把b的平方根存进a,再比较a的平方是否等于b
(应该可以吧,有错勿喷)

1 个赞

应该会有误差,比如1.99999999999999…
这种数,会有特殊情况
(除非开根号开不出来1.99999999999999…)

2 个赞

会有精度误差吗?

3 个赞

冷知识:1.999999999999999…=2(不是四舍五入)

2 个赞

请你告诉我,这是不是精度误差

1 个赞

可能是可能,但概率应该比较小

1 个赞

看上面你的代码
(double)sqrt(n)
假如n开根号得1.9999999999…
那么由于精度问题
的出来会得出2
(int)sqrt(n)一定等于2
那这样
2=2
原本不该成立的等式居然成立了!:fearful:

1 个赞

要追求严谨,不要抱有侥幸心理

1 个赞

概率小是小,但要严谨,不要骗分

1 个赞

证明如下:

  • 1/3 = 0.333…
    (1/3) * 3 = 1
    0.333… * 3 = 0.999…
    0.999… = 1
1 个赞