CodeSky 代码之空

随手记录自己的学习过程

C 判断一个数是否是完全平方数

2014-11-01 20:11分类: C评论: 3

若一个整数a为另一个整数b的平方,则称a为完全平方数,现在输入n个正整数,判断他们中有几个是完全平方数

这道底在小数据的时候可能比较简单,但遇到大数据的时候,就显得心有余而力不足了。

首先我们需要用long long,这种时候,我第一是想到用减法,开平方,用a-(int)a的方法,结果发现数字小于一定程度的时候,会近似的等于0,这个时候系统也通过了,默认其等于0,就算改成0.0也无法改变这个事实。

相等当然也是行不通的,理论上而言,永远都不能相信浮点数,浮点数不应该作为条件判断。

于是最终我们想到了用转换后的数字乘法,如果相等就是OK哒,如果不等的话证明开平方是小数。

这里可以用(long long)转换,也可以直接声明一个long long的变量,来存平方后的数,会自动转换为long long的值。

扩展阅读: C/C++判定是否为平方数 判断一个数是否是整数

第二篇文章有近似判断的方法,告诉我们不是 == 0.0 而是要给其一个浮点数导致的误差区间。

源代码:

1#include <stdio.h>
2#include <math.h>
3
4int main(void)
5{
6    int counter = 0;
7    long long num, sqr;
8    int n, i;
9    scanf("%d", &n);
10
11    for (i = 0; i < n; i++)
12    {
13        scanf("%lld", &num);
14
15        sqr = sqrt(num);
16        if (sqr * sqr == num)
17            counter++;
18    }
19    i = 1.0;
20    printf("%lld", sqr);
21
22    return 0;
23}
24

评论 (2)

嘉尚2015年2月25日 12:36

话说这种实现方式还是很不错的。不知道楼主学C的时候有研究过算法吗?表示我学C这种算法还是很纠结的。

敖天羽2015年2月25日 21:55

QvQ算法好难的说

知道91博客2014年11月21日 01:15

博主喜欢c语言?