完全平方数小总结

这篇博客探讨了三种与完全平方数相关的编程问题。第一部分展示了如何判断一个数是否为完全平方数。第二部分讨论了找出在1000范围内,加上特定数值仍为完全平方数的整数。第三部分则涉及找出三位数中既是完全平方数又具有两位数字相等的数。通过示例代码,博主解释了解决这些问题的不同方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1第一种就是简单的判断一个数是否为完全平方数

代码如下:

#include<stdio.h>
//完全平方数

int main()
{
	int n;
	int i;
	
	
	printf("please input n:");
	scanf("%d",&n);
	
	
	for(i=0;i<n;i++)
	{
		if(i*i==n)
		{
			printf("%d=%d*%d",n,i,i);
		}
	}
 } 

例子:输入9

结果如下图:

2第二种就是加上一个数仍然是完全平方数(取的是1000范围内的数)

例子:加上100,加上168仍然是完全平方数

这个我整了两种解法,一个是导入math.h库,使用开平方函数sqrt,代码段比较简单。

代码如下:

#include<stdio.h>
#include<math.h>
//输出整数,既是加上100是完全平方数,加上168也是完全平方数

int main()
{
	int i;
	int m;
	int n;
	for(i=0;i<1000;i++)
	{
		n=sqrt(i+100);
		m=sqrt(i+168);
		if(n*n==i+100 && m*m==i+168)
		{
			printf("%d=%d*%d\n%d=%d*%d",i+100,n,n,i+168,m,m);
		}    
		
	}	
}

第二种代码行数比较多,用了三个for循环

代码如下:(这个是我下意识就想到的)

#include<stdio.h>

//输出整数,既是加上100是完全平方数,加上168也是完全平方数

int main()
{
	int i;
	int j; 
	int l;
	int m;
	int n;
	for(i=0;i<10000;i++)
	{
		n=i+100;
		m=i+168;
		for(j=0;j<i;j++)
		{
			for(l=0;l<i;l++)
			{
				if(j*j==n && l*l==m)
		        {
		    	    printf("%d=%d*%d\n%d=%d*%d",n,j,j,m,l,l);
		    	  
			    }
			}
		    
		}	
	}	
}

答案图:

 3第三种是:输出所有三位整数中,既是完全平方数,又是有两位数字相等的数

代码如下:

for 循环  while循环均可

#include<stdio.h>
//输出所有三位整数中,既是完全平方数,又是有两位数字相等的数

int main()
{
	int i=100;
	int j;
	int a,b,c; 
	
	//while(i<1000)
	for(i=100;i<1000;i++)
	{
		for(j=0;j<i;j++)
		{
			if(i==j*j)
			{
				a=i/100;
				b=i%100/10;
				c=i%10;
				if(a==b||a==c||b==c)
				{
					printf("%d\n",i);
				}
			}
		}
	    //i++;	
	}
	return 0;
 } 

结果如下:

就是这样啦~

小小的总结一下简单的代码~ 

### 判断一个数是否为完全平方数 在 C++ 中,可以通过多种方法判断一个整数是否为完全平方数。以下是几种常见的实现方式: #### 方法一:使用 `sqrt` 函数 通过标准库中的 `std::sqrt` 函数可以轻松计算给定数值的平方根,并验证其是否为整数。 ```cpp #include <iostream> #include <cmath> // std::sqrt, std::floor bool isPerfectSquare(int num) { if (num < 0) return false; // 负数不可能是完全平方数 int root = static_cast<int>(std::sqrt(num)); // 计算平方根并转换为整型 return root * root == num; // 验证平方根的平方是否等于原数 } int main() { int number; std::cout << "请输入一个整数: "; std::cin >> number; if (isPerfectSquare(number)) { std::cout << number << " 是一个完全平方数." << std::endl; } else { std::cout << number << " 不是一个完全平方数." << std::endl; } return 0; } ``` 这种方法利用了浮点运算的结果特性,确保精度的同时也简化了逻辑处理[^1]。 --- #### 方法二:二分查找法 对于较大的整数,可以直接采用二分查找的方式逐步逼近可能的平方根值。 ```cpp #include <iostream> bool isPerfectSquareBinarySearch(long long num) { if (num < 0) return false; // 负数不是完全平方数 if (num == 0 || num == 1) return true; // 特殊情况 long long left = 0, right = num / 2 + 1; // 定义搜索范围 while (left <= right) { long long mid = left + (right - left) / 2; // 防止溢出 long long square = mid * mid; if (square == num) { // 找到精确匹配 return true; } else if (square < num) { // 平方小于目标值 left = mid + 1; } else { // 平方大于目标值 right = mid - 1; } } return false; // 如果循环结束仍未找到,则返回false } int main() { long long number; std::cout << "请输入一个整数: "; std::cin >> number; if (isPerfectSquareBinarySearch(number)) { std::cout << number << " 是一个完全平方数." << std::endl; } else { std::cout << number << " 不是一个完全平方数." << std::endl; } return 0; } ``` 此方法适用于非常大的整数场景下避免浮点误差的影响[^3]。 --- #### 方法三:暴力枚举法 虽然效率较低,但对于较小规模的数据集仍然适用。该方法逐一尝试从 0 开始的所有整数直到达到或超过目标值为止。 ```cpp #include <iostream> bool isPerfectSquareBruteForce(int num) { if (num < 0) return false; // 负数不是完全平方数 for (long i = 0; i * i <= num; ++i) { // 枚举所有可能性 if (i * i == num) { return true; } } return false; } int main() { int number; std::cout << "请输入一个整数: "; std::cin >> number; if (isPerfectSquareBruteForce(number)) { std::cout << number << " 是一个完全平方数." << std::endl; } else { std::cout << number << " 不是一个完全平方数." << std::endl; } return 0; } ``` 尽管简单易懂,但在性能上远不如前两者高效[^2]。 --- ### 总结 上述三种方法各有优劣,在实际应用中可以根据具体需求选择合适的技术方案。通常情况下推荐优先考虑基于数学函数或者优化后的算法来提升程序运行速度与稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值