高精度乘与除

当数的位数过多,爆long long时,进行乘除操作就要用到高精度

高精度乘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 初始化 sum[10000]={0,1},lens=1;
// sum数组后面为高位,前面为低位,lens记录数组sum的长度。
void times(long long x)//x 为要乘进去的数
{
int t=0;
for(int i=1;i<=lens;i++){
sum[i]*=x;
}
for(int i=1;i<=lens;i++){
t+=sum[i];
sum[i]=t%10;
t/=10;
}
while(t!=0){
lens++;
sum[lens]=t%10;
t/=10;
}
}

高精度除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// sum为高精度的被除数,x为除数,数组ans里存的是商(后边为高位,前边为低位)。
// lend记录数组ans的长度。
void division(long long x)
{
int t=0;
lend=lens;
memset(ans,0,sizeof(ans));
for(int i=lend;i>=1;i--){
t*=10;
t+=sum[i];
if(t>=x){
ans[i]=t/x;
t%=x;
}
}
while(ans[lend]==0){
if(lend==1)
break;
lend--;
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • © 2020 Super Monkey
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信