首 页 行业热点 新车 试驾评测 养车用车 车型库

C语言检验k是某个整数的平方

发布网友

我来回答

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比较!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com