首页 > 编程语言 >基础算法(1)

基础算法(1)

时间:2024-06-23 19:00:05浏览次数:21  
标签:返回 10 存储 int 基础 算法 div 拆位

文章目录


在c++中,会涉及到一些算法,例如递归、递推、动态规划(DP)、深搜(DFS)、广搜(BFS)……今天我们要说的是一些简单的算法

数学函数

math.h(cmath)头文件

选择任意一个头文件

#include <cmath> //仅C++可用
#include <math.h> //C/C++可用

里面有很多的数学函数

  1. pow(x, y):返回 x y x^{y} xy,也就是 y y y个 x x x相乘
  2. sqrt(n):返回 n \sqrt{n} n ​,也就是结果乘结果要等于n
  3. abs(n):返回 ∣ n ∣ \left | n \right | ∣n∣,如果 n n n是负数(小于0的数),那么把这个数的负号去掉。它返回整数
  4. fabs(n):和abs(n)一样,但它可以返回浮点数
  5. rand(); :获得一个随机数(0~32767)
  6. srand(n); :设置随机数种子
  7. time(0); :获得系统时间(一个整数)
  8. srand(time(0)); :获得真正的随机数的关键,放在rand(); 之前
  9. sin(x):返回 sin ⁡ x \sin x sinx的值
  10. cos(x):返回 cos ⁡ x \cos x cosx的值
  11. tan(x):返回 tan ⁡ x \tan x tanx的值,也可以写成 sin ⁡ x ÷ cos ⁡ x \sin x \div \cos x sinx÷cosx
    不知道三角函数,点我了解一下
  12. trunc(n):给 n n n取整
  13. ceil(n):返回 ⌈ n ⌉ \left \lceil n \right \rceil ⌈n⌉,也就是向上取整 n n n
  14. floor(n):返回 ⌊ n ⌋ \left \lfloor n \right \rfloor ⌊n⌋,也就是向下取整 n n n
  15. round(n):四舍五入 n n n
  16. log(n):返回 lg ⁡ n \lg n lgn的值
  17. INT_MAX:返回int类型的最大存储值
  18. INT_MIN:返回int类型的最小存储值
  19. SHORT_MAX:返回short类型的最大存储值
  20. SHORT_MIN:返回short类型的最小存储值
  21. LONG_MAX:返回long类型的最大存储值
  22. LONG_MIN:返回long类型的最小存储值
  23. LONG_LONG_MAX:返回long long类型的最大存储值
  24. LONG_LONG_MIN:返回long long类型的最小存储值

float.h头文件

输入头文件#include <float.h>,里面有六个宏定义

  1. FLT_MAX:返回float类型的最大存储值
  2. FLT_MIN:返回float类型的最小存储值
  3. DBL_MAX:返回double类型的最大存储值
  4. DBL_MIN:返回double类型的最小存储值
  5. LDBL_MAX:返回long double类型的最大存储值
  6. LDBL_MIN:返回long double类型的最小存储值

拆位

拆位,就是把一个整型的数的各个位拆下来,怎么拆位呢?先从一种数学角度来说
a b c d ‾ = 1000 × a + 100 × b + 10 × c + 1 × d \overline{abcd} = 1000 \times a + 100 \times b + 10 \times c + 1 \times d abcd=1000×a+100×b+10×c+1×d
这就是在数学中拆卸位的方法,可是在c++中也有一种拆位方式

公式
个位 n ÷ 1 % 10 n \div 1 \% 10 n÷1%10 或者 n % 10 n \% 10 n%10
十位 n ÷ 10 % 10 n \div 10 \% 10 n÷10%10 或者 n ÷ 10 n \div 10 n÷10
百位 n ÷ 100 % 10 n \div 100 \% 10 n÷100%10 或者 n ÷ 100 n \div 100 n÷100
千位 n ÷ 1000 % 10 n \div 1000 \% 10 n÷1000%10 或者 n ÷ 1000 n \div 1000 n÷1000
万位 n ÷ 10000 % 10 n \div 10000 \% 10 n÷10000%10 或者 n ÷ 10000 n \div 10000 n÷10000
十万位 n ÷ 100000 % 10 n \div 100000 \% 10 n÷100000%10 或者 n ÷ 100000 n \div 100000 n÷100000

编程实现:

#include <iostream>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	int g = n/1%10; //个位
	int s = n/10%10; //十位
	int b = n/100%10; //百位
	int q = n/1000%10; //千位
	printf("%d %d %d %d", q, b, s, g); 
	return 0; 
}

拆位进阶

我们可以进化系统,不规定位数还能求和、拆位和记位总数
输入这个:

19283

会输出两行,第一行两个数分别表示这个输入的数的总位数和位和,第二行则是拆位:

5 23
1 9 2 8 3

代码:

#include <iostream>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	int cnt=0, sum=0; 
	int a[15] = {}; //使用数组存储数位 
	while(n) {
		a[cnt++] = n%10; //二合一,各数位和总位数同时记录 
		sum += n%10; //sum累加 
		n /= 10; //删除个位,十位补个位,百位补十位...... 
	} 
	cout << cnt-- << " " << sum << endl; //下标将会从长度-1开始输出 
	for(int i=cnt; i>=0; i--) {//倒排输出 
		cout << a[i] << ' '; 
	}
	return 0; 
}

奇偶判断

奇数,就是我们俗称的单数,只要它的个位是1,3,5,7,9中其中一个,它就是奇数
偶数,就是我们俗称的双数,只要它的个位是0,2,4,6,8中其中一个,它就是偶数
判断奇偶其实非常简单,判断它是否能够被2整除,能的是偶数,不能的是奇数
上代码:

#include <iostream>
using namespace std; 
int main() {
	int n; cin >> n; 
	cout << (n%2?"奇数":"偶数"); 
	return 0; 
}

质数判断

质数是什么?质数是值一个数只有1和它本身两个因数的数,合数是除了1和它本身外还有其他因数的数。另外,1既不是质数也不是合数。如何做出这种质数判断机呢?看下代码

#include <iostream>
using namespace std; 
int main() {
	unsigned n; 
	cin >> n; 
	if(n<=1) {
		cout << "既不是质数也不是合数"; 
		return 0; 
	} else {
		for(int i=2; i*i<=n; i++) {
			if(n%i==0) {
				cout << "这是合数"; 
				return 0; 
			} 
		}
	}
	cout << "这是质数"; 
	return 0; 
}

另外,可以制作封装函数(讲解敬请期待),在这里把代码发一下,只要把以下代码放在main()前面,就可以使用此函数,用法:

  1. isprime(n):判断n是不是质数,是返回1,不是返回0
  2. istotal(n):判断n是不是合数,是返回1,不是返回0
bool isprime(int n) { //判断是否为质数 
	if(n<=1) return 0;
	for(int i=2; i*i<=n; i++)
		if(n%i==0) return 0;
	return 1;
}

bool istotal(int n) { //判断是否为合数 
	if(n<=1) return 0;
	for(int i=2; i*i<=n; i++)
		if(n%i==0) return 1;
	return 0;
}

好了,点赞,关注,散会!

标签:返回,10,存储,int,基础,算法,div,拆位
From: https://blog.csdn.net/2401_85898378/article/details/139901080

相关文章

  • [MYSQL] 数据库基础
    1.什么是数据库从数据库的名字可以看出,它是用来操作(增删查改....)数据的,事实上也的确如此,通过数据库,我们可以更方便.更高效的来操作.管理数据以文件形式存储数据的缺点文件的安全问题文件不利于数据的查询和删除文件不利于存储海量数据操作文件并不方便为了解决上述......
  • Containerd-基础
    本文致力于学习并梳理Containerd,信息来源均参考至官方Github,原文链接如下补充。开始使用link:https://github.com/containerd/containerd/blob/main/docs/getting-started.md仅梳理Linux二进制安装,其他信息并未梳理。依赖与限制独立使用containerd依赖于runc与CNIplugi......
  • 【Matlab】LSTM长短期记忆神经网络分类算法(附代码)
      资源下载: https://download.csdn.net/download/vvoennvv/89465998 分类算法资源合集:https://download.csdn.net/download/vvoennvv/89466519 目录MatlabSVM支持向量机分类算法MatlabRF随机森林分类算法MatlabRBF径向基神经网络分类算法MatlabPSO-BP基于粒子......
  • CAN总线基础(2)--数据帧深层解析
    (一)五种基本的帧类型作用以及介绍数据帧: 是用于传输数据的基本单元。它包含一个帧头、标识符、控制位、数据长度和数据等字段。遥控帧: 是一种特殊的CAN数据帧,用于向其他节点发送命令或请求。错误帧: 是指在CAN总线上出现了错误,例如误码、冲突等,无法正确接收的数据帧。......
  • [算法篇] 简单讲讲一维前缀和与差分
    前缀和:先给定义:指某序列的前n项和是不是与我们高中所学的数列求和类似?给出用途: 如我们于一组长度为n的整数序列中询问m次,每次询问中输出区间[l,r]中数之和倘若我们先不使用前缀和,预测一下思路将会是:m次询问中,每一次都求和数组[l,r]时间复杂度为O(n),思路很简单但若m非常大则将......
  • JAVA类与对象的基础概念(JAVA基础)
    类的定义1.定义:类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象2.属性:用于定义该类或该类对象包含的数据或者说静态特征3.初始化∶定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化4.方法:用于定义该类或该类实例的行为特征和功能实现......
  • 【面经】超全版本AIGC算法工程师面经
    AIGC算法工程师面经1.个人项目介绍1.1如何介绍1.2加分点1.3注意事项2.深度学习基础2.1公式理解类2.2模型训练通识3.细分算法3.1NLP问题3.2Transformer细节问题3.3大模型问题本篇为来自各大厂从业者等业内人士做的免费面经总结,希望能为想进入或者即将入......
  • [模式识别复习笔记] 第9章 神经网络及BP算法
    1.基本概念1.1神经元神经网络是很多的神经元模型按照一定的层次结构连接起来所构成的。1.2激活函数\(\text{ReLU}\)函数:修正线性单元ReLU,是一种人工神经网络中常用的激活函数。\[\text{ReLU}(x)=\max(0,x)\]\(\text{sgn}\)阶跃函数:它将输入值映射为......
  • [Java基础]String
    String常量池/运行时常量池java类编译之后生成的.class文件包含三部分信息,类的基本信息,常量池,方法的定义通过javap-vxxxx.class命令可以看到Constantpool:#1=Methodref#2.#3//java/lang/Object."<init>":()V#2=Class#4......
  • 吴恩达机器学习 第三课 week2 推荐算法(上)
    目录01学习目标02推荐算法2.1定义    2.2应用2.3算法03 协同过滤推荐算法04电影推荐系统4.1问题描述4.2算法实现05总结01学习目标   (1)了解推荐算法   (2)掌握协同过滤推荐算法(CollaborativeFilteringRecommenderAlgorithm)原理  ......