RE:运行时错误(一般考虑数组越界或者栈溢出,或者指针访问了非法的位置)
1、考虑使用更大数组或者动态数据,
2、大数组切记开成全局变量(全局变量在静态分配区分配内存,局部变量在栈上分配内存。如果函数内的数组太大,可能会造成栈溢出)
int:2e9
long long int 1e19
unsigned long long 2e19
20!:2e18
高精度加法/减法:
核心思想:将高精度的数按数组的方式存储每一位,由低到高对每一位进行计算。
c[i]+=a[i]+b[i];
if(c[i]>10)
{ c[i+1]++;
c[i]-=10;
}
减法同理
高精度乘法
高精度乘高精度:
核心思想:每位相乘,由低到高计算
for(int i=1;i<=a[0];i++)
{
for(int j=1;j<=b[0];j++)
{
c[i+j-1]+=a[i]+b[j];
while(c[i+j-1]>=10){
c[i+j]++;
c[i+j-1]-=10;
}
}
}
高精度乘低精度:
核心思想:将高精度转化为数组后,低精度依次与高精度的每一位相乘后取模即可
高精度除法
高精度/低精度
核心思想:高精度转换为数组,用sum记录余的数码进行运算。
数。
for(int i=a[0];i>=1;i--){
sum=sum*10+a[i];
c[i]=sum/b;
sum%=b;
}
压位高精度
将参与运算的数不再按照一个个单独的数码进行拆分,而是按照多位多位的拆分
或者改变进位制