2020年3月8日NOIP课程知识整理
一、高精度计算 这一次课程主要讲了高精度加、减、乘。 首先,定义一个高精度的结构体,储存这个数字的长度、和这个数字本身。 1 struct gaojing 2 { 3 int n,z[2333]; 4 5 gaojing() 6 { 7 n=1; 8 memset(z,0,sizeof(z)); 9 } 10 11 void init() 12 { 13 scanf("%s",s+1); 14 int l=strlen(s+1); 15 reverse(s+1,s+l+1); 16 17 n = l; 18 for (int a=1;a<=n;a++) 19 z[a] = s[a]-'0'; 20 } 21 22 void print() 23 { 24 for (int a=n;a>=1;a--) 25 printf("%d",z[a]); 26 } 27 }; 1、高精度加法 只需要将数字当做字符串读入,在一位一位地相加,考虑进位即可。 这里还需要注意的一点是,我们在写高精计算函数时,参数最好要读取地址,而不是直接读取字符串。这样如果这个字符串很大,参数进入时还要把这个很大的字符串复制一遍,既消耗时间,又消耗内存。 1 gaojing operator+(const gaojing &a,const gaojing &b) 2 { 3 gaojing c; 4 c.n =