题目:
判断一个数是否是完全平方数。
以下数字为完全平方数:4=2*2,9=3*3,144=12*12,169=13*13
有两个方法,可以求完全平方数:
方法一:输入一个数,遍历所有比这个数小的数,只要有其中一个数满足条件 小于该数的数 * 小于该数的数 = 该数
,如3*3 = 9
,那么这个数是完全平方数。
方法二:输入一个数,对这个数开方后取整,√该数 * √该数 = 该数
,如√9*√9 = 3*3 = 9
,那么这个数是完全平方数。
- 使用
sqrt()
函数,对整数进行开方,开方后得到的是浮点数 - 完全平方数开方后得到的应该是一个整数,而不是小数,所以使用
(int)
对这个开方后的数取整(3.9取整是3,3.0取整是3) - 这个数开方后取整得到的数,再平方,如果等于输入的数,那么该数是完全平方数
例:
输入9:√9 = 3.000000 -> (int)3.000000 = 3 -> 3*3 = 9
,得到9是完全平方数
输入7:√7 = 2.645751 -> (int)2.645751 = 2 -> 2*2 != 7
,得到7不是完全平方数
1.方法一的代码实现如下:
#include<stdio.h>
int main()
{
int i,n,flag=0; //flag标记是否是完全平方数,默认flag=0不是完全平方数
scanf("%d",&n);
for(i=1;i<n;i++) //从1循环到n-1
if(i*i==n) //完全平方数判断条件
flag=1;
if(flag==1)
printf("%d是完全平方数\n",n);
else
printf("%d不是完全平方数\n",n);
return 0;
}
运行结果如下:
2.方法二的代码实现如下:
#include<stdio.h>
#include<math.h>
int main()
{
int n,integer;
scanf("%d",&n);
integer = (int)sqrt(n); //对输入的整数开方后,得到浮点数,再对浮点数取整
if(n == integer * integer) //完全平方数判断条件
printf("%d是完全平方数\n",n);
else
printf("%d不是完全平方数\n",n);
return 0;
}
运行结果如下: