在解决一些问题时
常常出现精度太高,而编译错误
高精度算法能够解决精度问题
诶
使用高精度算法的核心算法
加法:
c[i]=a[i]+b[i]; if(c[i]>=10){c[i]%=10;++c[i+1];}
减法:
if(a[i]<b[i]) {--a[i+1];a[i]+=10;} c[i]=a[i]-b[i];
乘法:
c[i+j-1]=a[i]*b[j]+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10;
预处理时,需要字符串方式输入,利于字符串函数与操作运算
void init(int a[]) { string s; cin>>s; len=s.length(); for(i=1;i<=len;i++) a[i]=s[len-i]-'0'; }
顺便在这里也说一下吧
经常在题解里看到一种东西叫“快读”,与这个字符串输入有很大相似
void read(int &x) { char c=getchar();x=0; while(c<'0'||c>'9') c=getchar(); while(c<='9'&&c>='0'){ x=x*10+c-48;c=getchar();}
诶
就不展示例题了