1.进制转换
1.将P进制数字x转换为10进制数y。
int y=0, product=1;
while(x != 0){
y = y + (x % 10) * product;
x = x / 10;
product = product * p;
}
2.将十进制数y转换为Q进制数z。
int z[40], num= 0;//数组z存放进制数y的每一位,num为位数
do{
z[num++] = y % Q;//除基取余
y = y / Q;
}while(y != 0);//当商不为0时候进行循环
注意:输出时要从后往前输出结果:for(int i=num-1;i>=0;i--) cout<<z[i];
2.折半(二分)查找
在这里插入代码片
3.运用四舍五入
1.对于总成绩要a的40%+b的60%(四舍五入精确到整数)
ans=(a*0.4+b*0.6+ 0.5);
2.对于某个数N四舍五入
t = N / 2 + N % 2;
4.判断素数
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
5.求gcd(最大公约数)的方式
不要缩写成一行,否则会编译错误
int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
6.最小值数组、最大值数组
用途:判断某个下标i左边的数是否都小于a[i],或者右边的数是否都大于a[i]。
//l[i]表示a1~ai中的最大值
//r[i]表示ai~an中的最小值
#include<iostream>
using namespace std;
const int N=1e5+10;
int q[N],l[N],r[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>q[i];
l[0]=-2e9;//特判边界,求最大值,先把0初始化为一个负无穷
for(int i=1;i<=n;i++) l[i]=max(l[i-1],q[i]);
r[n+1]=2e9;//特判边界,求最小值,先把n+1初始化为一个正无穷
for(int i=n;i;i--) r[i]=min(r[i+1],q[i]);
}