【归纳】常见函数模版和解析

1.判断是否是质数

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

简单粗暴的实现如下:

bool is_prime(const int& x) {//判断是否为质数的函数
    if (x < 2)return false;//小于2的数都不是质数
    for (int i = 2; i < x; i++)//枚举除1和这个数本身以外的所有数
        if (x % i == 0)//如果枚举的这个数能被i整除
            return false;//返回这个数不是质数
    return true;//否则就返回这个数是质数
}

还是一样的,看不懂也没关系,后面会慢慢学。

当然,合数有一个这样的特征:它们的因数都是成对出现的。比如:

20=1* 20=2* 10=4* 5

所以对于 x x x,我们只需要枚举到 x \sqrt{x} x 就可以了。

但使用sqrt函数会导致效率低下(计算机中开方、除法永远比乘方、乘法慢)所以我们可以判断 i ∗ i < = x i*i<=x ii<=x就可以了。

改进后的程序如下:

bool is_prime_quick(const int& x) {//判断是否为质数的函数
	if (x < 2)return false;//小于2的数都不是质数
	for (int i = 2; i * i <= x; i++)//只需要枚举到sqrt(x)就行了
		if (x % i == 0)//如果枚举的这个数能被i整除
			return false;//返回这个数不是质数
	return true;//否则就返回这个数是质数
}

2.判断是否是闰年

判断闰年有一个口诀:四年一闰,百年不闰,四百年又闰。根据这个口诀模拟就好了。

bool leap_year(const int& x) {//判断是否为闰年的函数
	if ((x % 4 == 0 && x % 100 != 0) || x % 400 == 0)//口诀
		return true;//满足条件就返回真
	return false;//否则返回假
}

3.判断是否是完全数

一个数所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。我们就称这个数为完全数。

bool is_perfect_num(const int& s) {//判断是否为完全数的函数
	int m = 0;//用m存储这个数所有的真因子之和
	if (s < 6)return false;//最小的完全数是6,小于6的都不是完全数
	//枚举小于这个数的数,注意不能枚举到这个数本身
	for (int i = 1; i < s; i++)
		if (s % i == 0)//如果枚举的这个数是s的因子
			m += i;//加上
	if (m == s)return true;//相等就返回真
	return false;
}

4.判断是否是完全平方数

若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数

我们可以运用隐式类型转换判断一个数是否是完全平方数。

bool is_perfect_pow_2_number(const int& n) {//判断是否为完全平方数的函数
	int x = (int)sqrt(n);//强制转换,如果不是完全平方数则会丢失精度
	if (x * x == n)//如果这个数的平方等于原数
		return true;//返回真
	return false;
}

5.判断是否是回文数

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数

我们只需要根据定义模拟就可以了。

bool is_palindrome(const int& num) {//判断是否为回文数的函数
	int num1 = 0, n;
	if (num / 10 == 0)return true;//个位数也是回文数
	//因为num最后要用来判断,所以不能直接使用它。
	n = num;//要将num的值赋给另外一个变量
	while (n) {//只要没有取完就一直取
		num1 = num1 * 10 + n % 10;//更新num1
		n = n / 10;//取完一位,除以10
	}
	if (num1 == num)return true;//如果相等就返回真
	return false;
}

6.倒序分解一个数的每一位

int a[10010], cnt;//存储这个数的每一位
void Decompose_each_digit(const int& num) {
    int n = num;//先将num储存下来
    while (n) {//只要没有取完就继续取
        a[++cnt] = n % 10;//分解个位
        n /= 10;//把个位丢掉
    }
}

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝胖子教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值