发布网友
共5个回答
热心网友
不可以,这个%只适和于整数,对小数是无效的
检验一个数的平方常用的办法
n=sqrt(k)
n*n==k来叛定
如果n*n恰好完全等于k就是完全开方
热心网友
这样不行。浮点数是没有所谓%运算的。
正确的做法是n = (int)sqrt(k), 然后判断k==n*n。
如果考虑到浮点数的非精确性,最好还要验证一下k==(n+1)(n+1)和k==(n-1)(n-1).追问sqrt(7744)=88
sqrt(7733)==87.954154……
那(int)sqrt(7733)=87,我测试了一下把这个ptintf出来
那sqrt(7799)=88.311……
那(int)强制转换后是不是n=88了?
这个强制转换是不是就是把小数去掉?
追答是的,强制转换会把小数部分去掉。
热心网友
可以的,
最简单的判断是不是小数的方法就是
a-(int)a > 0 ? 当然,前提是这个数是正数,如果是负数,那么相反。
热心网友
// sqrt返回的是浮点类型,其实可以这样,先去平方根转为整形,再平方进行验证~~
n = (int) sqrt(k);
if (n * n != k)
{
printf("Flase \n");
}
else
{
printf("Ture: %d = %d ^ 2\n", k, n);
}
热心网友
#include "stdio.h"
#include "math.h"
void main(void){
int n=1000001;
double a;
if((a=sqrt(n))==(int)a) printf("OK! %d^2=%d\n",(int)a,n);
else printf("NO!\n");
}追问If判断那里,一个是double一个是 int型,能比较的?
追答==连接起来的算式是不是表达式呢?应该算吧。那么,(int)a就把a的小数部分删除了,只取了整数部分;可是表达式中只要有一个是“高级”数据类型(这里的double就比int高),其他的类型就要向“高级”的类型自动转换,就是说最后比较的时候,前面的a是有小数部分的,而后面的a的小数部分是0,比较仍然是在两个double类型之间进行的。比如a=4.765,那么(int)a=4,而比较时却是用4.765与double型的4.0比较,并不是与int 4比较!