在函数内部不要定义过长的数组,因为函数内部的变量是放在栈中,大小限制为1MB。当变量大小超过一MB,就要定义在全局变量中。
报错,100万个int 400万byte
400 000 00 B/1024/1024 =3.8 MB 超过空间
解决办法将变量定义为全局变量,全局变量放在堆空间,没有限制(仅受内存大小限制)
局部变量默认值是随机的。
全局变量默认值全部是0
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
对于一个大而且长的变量尽量定义为全局变量。
三、数组翻转的实现 1. 逻辑思路 2.代码reverse() 需要两个参数,第一个是翻转数组的起始位置,第二个是翻转数组末位置的下一个位置。导入algorithm是为了使用reverse()函数。
#include#include using namespace std; int main() { int a[100]; int n,k; cin>>n>>k; for(int i=0;i >a[i]; reverse(a,a+n); reverse(a,a+k); reverse(a+k,a+n); for(int i=0;i 四、浮点数比较大小 1.起因 因为浮点数精度问题,经过运算后获得的数据与想象中不一致,直接比较会出现问题,需要加上误差值eps 10^-6
2.错误比较#include3.浮点数复杂运算后的大于、小于和等于比较#include using namespace std; int main() { double a=3; double b=sqrt(3)*sqrt(3); printf("b=%.20lfn",b); if(b==3) puts("相等"); else puts("不相等"); return 0; } 设立误差项
#include#include //误差 const double eps=1e-6; using namespace std; int main() { double a=3; double b=sqrt(3)*sqrt(3); if(fabs(b-a) 五、高精度2的n次方 1.题目 2.思路 int 有效数字 10位
double 有效数字 15-16位
求2的10000次方有多少位,log 。log 2=0.3 10000*log 2 大约3000多位。存不下来。int 10位,double16位。使用数组模拟运算过程
用数组存放一组数据,计算加减乘的时候,a[0] a[1]从低位开始。模拟数式
3.代码
#include#include using namespace std; const int N=3010; int main() { //数组中只有一个数字是1,其余都是0。 int a[N]={1}; int n=0; cin>>n; //位数 int m=1; cout<<(int)pow(2,n)< =0;i--) cout< 在代码中做了pow(2,n)与高精度计算的对比。
六、数组初始化 1.简单初始化 2.bit byte KB MB的关系 以及Mb Kb
当n过大时,pow()就不能使用。
3.使用函数初始化数组为0或-1
#include
memset(数组名,每个字节的数据,数组多少字节)
memset 以字节计算数据。数组的长度为字节数
1 int 是4个byte。#include#include using namespace std; int main() { int a[10],b[10]; //将数据初始化为0 memset(a,0,40); //计算机负数补码操作,将数据初始化为-1 memset(b,-1,40); for(int i=0;i<10;i++) cout< 4.详细描述memset
一共10组 。取出一组,也就是4 byte 占32 bit。
则在memset中将每个byte赋值为1。得到的结果不是1。
5.sizeof 计算字节大小
二级制101 10进制5。七、复制数组
八、longlong输出格式
memcpy(目标数组,被复制的数组,sizeof 字节长度)



