高精度数的优化
如果只是针对加减法的话可以采用亿进制来优化,乘法的话考虑万进制(不超出int或long long的范围)
前面有一个高精度数优化的实例
优化的时候,主要是读数和输出模块上略有变化,其他只需要修改相应的进制基数就可以了
读数模块
123456
万进制表示为:a[0]=2,a[2]=12,a[1]=3456
6位变成2位,减少计算次数
void Read(int a[]){ //读数模块
string s;
cin>>s;
int len=s.size();
for(int i=0; i<len; i++)
a[(len+3-i)/4]=a[(len+3-i)/4]*10+s[i]-'0'; //(len+3-i)/4,处理每一个万进制位上的值
a[0]=(len+3)/4; //万进制的位数
return ;
}
输出模块
void Out(int a[]){
cout<<a[a[0]];//先输出最高位,最高位前面不需要多加0
for(int i=a[0]-1;i>0;i--){ //除最高位外的其他位都要输出4位(万进制)
cout<<a[i]/1000;
cout<<a[i]/100%10;
cout<<a[i]/10%10;
cout<<a[i]%10;
}
开启文档设置打开发布面板
- 文档