大整数四则运算(高精度)

高精度算法

int 型的数据范围为-231~231-1,long long 型的数据范围为-263~263

高精度也就是大数运算,最核心的思想是将大数利用数组来进行存储并按位运算,对于不同的运算法则,处理的操作也有区别

对于大数运算我们可以理解为大数的竖式运算,其原理来源于小学数学的竖式计算

预处理

对于大数的运算可以先利用字符数组输入获得,然后再进一步转化为整型数组

在转化为整型数组的时候需要将整个大数逆置,这样更方便我们计算以及操作

一个大数预处理的演示代码:

char s[max];
int a[max]
gets(s);//获取字符串
int ls = strlen(s);//获得字符串长度
for(int i=0;i<ls;i++) a[ls-i] = s[i]-'0';//将获得的字符数字逆序转化为整型

高精度加法

高精度加法可以使用按位运算来进行

c[i] += a[i]+b[i];  //先按位进行加法运算
c[i+1] = c[i]/10;	//进位
c[i] = c[i]%10		//进位后的值

高精度加法需要注意最高位的前导可能为0,要进行删除

c的长度最大为max(a,b)或者a+1;(a,b不是等长的时候最大为max(a,b);a,b等长为a+1或者b+1)

高精度减法

按位进行运算

if(a[i]<b[i]){	//小数借位,大数可以直接跳过
    a[i+1]--;//向前一位借位
    a[i] = a[i]+10
}
c[i] = a[i]-b[i];

高精度乘法

对于乘法的高精度,需要确定c[i]与a[i]*b[i]的位置

在这里插入图片描述

根据经验,c[i+j-1]与a[i],b[j]的位置对应(不是乘法对应)

c[i+j-1] += a[i]*b[j]; //每一位作乘法
c[i+j] += c[i+j-1]/10;	//乘法进位
c[i+j-1] = c[i+j-1]%10;	//本位确认

乘法c最大长度为lc = la+lb,c[lc]要注意可能会出现前导为0的情况

高精度除法

高精度除以低精度

long long b,x=0;
c[i] = (x*10+a[i])/b;
x = (x*10+a[i])%b;

注意消去前导零

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunnydog_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值