文章目录
在c++中,会涉及到一些算法,例如递归、递推、动态规划(DP)、深搜(DFS)、广搜(BFS)……今天我们要说的是一些简单的算法
数学函数
math.h(cmath)头文件
选择任意一个头文件
#include <cmath> //仅C++可用
#include <math.h> //C/C++可用
里面有很多的数学函数
pow(x, y)
:返回 x y x^{y} xy,也就是 y y y个 x x x相乘sqrt(n)
:返回 n \sqrt{n} n ,也就是结果乘结果要等于nabs(n)
:返回 ∣ n ∣ \left | n \right | ∣n∣,如果 n n n是负数(小于0的数),那么把这个数的负号去掉。它返回整数fabs(n)
:和abs(n)
一样,但它可以返回浮点数rand();
:获得一个随机数(0~32767)srand(n);
:设置随机数种子time(0);
:获得系统时间(一个整数)srand(time(0));
:获得真正的随机数的关键,放在rand();
之前sin(x)
:返回 sin x \sin x sinx的值cos(x)
:返回 cos x \cos x cosx的值tan(x)
:返回 tan x \tan x tanx的值,也可以写成 sin x ÷ cos x \sin x \div \cos x sinx÷cosx
不知道三角函数,点我了解一下trunc(n)
:给 n n n取整ceil(n)
:返回 ⌈ n ⌉ \left \lceil n \right \rceil ⌈n⌉,也就是向上取整 n n nfloor(n)
:返回 ⌊ n ⌋ \left \lfloor n \right \rfloor ⌊n⌋,也就是向下取整 n n nround(n)
:四舍五入 n n nlog(n)
:返回 lg n \lg n lgn的值INT_MAX
:返回int
类型的最大存储值INT_MIN
:返回int
类型的最小存储值SHORT_MAX
:返回short
类型的最大存储值SHORT_MIN
:返回short
类型的最小存储值LONG_MAX
:返回long
类型的最大存储值LONG_MIN
:返回long
类型的最小存储值LONG_LONG_MAX
:返回long long
类型的最大存储值LONG_LONG_MIN
:返回long long
类型的最小存储值
float.h头文件
输入头文件#include <float.h>
,里面有六个宏定义
FLT_MAX
:返回float
类型的最大存储值FLT_MIN
:返回float
类型的最小存储值DBL_MAX
:返回double
类型的最大存储值DBL_MIN
:返回double
类型的最小存储值LDBL_MAX
:返回long double
类型的最大存储值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()
前面,就可以使用此函数,用法:
isprime(n)
:判断n是不是质数,是返回1,不是返回0istotal(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