1. 关于数组反转
<algorithm>
的reverse(翻转起始位置,翻转终止位置)
,可搭配begin()
与end()
使用
将数组内容反转
int main(){
int a[10];
//输入
for (int i=0;i<10;i++){
cin>>a[i];
}
//反转
reverse(begin(a),end(a));
//打印
for (int i=0;i<10;i++){
cout<<a[i];
}
return 0;
}
数组顺时针旋转k次
即将最右边k个数放到最左边
int a[100];
int n; cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
//全部反转,反转前k个
reverse(a, a + n);
reverse(a, a + k);
reverse(a + k, a + n);
for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';
2. 数组升序打印
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
int a[100];
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
for (int i = 0; i < n; i ++ )
for (int j = i + 1; j < n; j ++ ) // 和后面的比较,把后面最小的换到前面来。
if (a[i] > a[j])
swap(a[i], a[j]);
for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';
cout << endl;
return 0;
3. 高精度运算
高精度运算指在计算机科学中处理比机器默认数据类型更大的整数或浮点数的运算。因为标准数据类型的精度和范围有限,无法满足某些大数运算的需求.
高精度运算的实现方法
将大数分解为多个较小的部分,然后对这些部分进行乘法运算,再通过适当的方法合并结果。
采用数组来表示大数,每个元素表示大数的一位,采用a[0]开始存储大数的最低位(小端存储结构)
还原竖式计算过程:除数保留,余数进位
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int N=3010;
int main(){
int a[N]={1}; // 存储大数
int n;cin>>n; // 求2^n
int m=1; // 当前位数
int t; //当前进位
for(int i=0;i<n;i++){
t=0;
for(int j=0;j<m;j++){
t +=(a[j]*2); // 竖式计算
a[j] = t%10;
t = t/10; // 除数保留,余数进位
}
if(t!=0){ a[m] = t; m++;}
}
for(int i=m-1;i>=0;i--) cout<< a[i];
return 0;
}
4. 数组初始化
- 对于局部数组变量,最大不超过1MB,随机初始化
- 对于全局数组变量,最大可不超过内存大小,并且自动全部初始化为0
<cstring>
库中的memset()
函数可用于
memset(数组名,初始化的值,初始化长度(Byte))
如memset(a,0,sizeof(a))
的作用是将数组a清零。
如memset(a,-1,sizeof(a))
的作用是将数组a全部赋成-1。
5. 数组复制
<cstring>
库中的memcopy()
函数可将一个数组的内容复制给另一个数组
memcopy(目标数组,原数组,复制长度(Byte))