c++算法系列one:高精度计算&&信息学奥赛一本通1169大整数减法代码

本文介绍了C++中处理大整数加减法的高精度计算方法,包括数据接收、存储、数位处理和进位借位操作。通过实例代码展示了如何使用字符串和数组实现大整数减法,并提醒读者注意long long类型数值范围的限制。
摘要由CSDN通过智能技术生成

最近这几天,粉丝一直在催更,
在这里插入图片描述
回归主题,大家好我是屁孩君。
今天给大家来简单地讲解一下高精度计算。
在c++刷题网站上大家应该都做到过高精度加法,大整数减法,高精度乘法,高精除低精…本想着用long long去解决简单得很,简直就是一道送分题,可是提交一看,what,答案错误,出现一大堆负数。这时的问题就出在那个数大于long long的取值范围,所以才会出现错误。这时,我们就得运用高精度计算了。
1.高精度计算中需要处理好数据的接收与存储方法,数据太长的时候,可以用字符串的形式输入,这样可以利用字符串函数和操作进行运算,将每一位数取出,存到你定义的数组里,下面是操作代码

void f(int g[])传进一个数组
{
		string a;
		cin>>a;
		len=a.length();
		for(q=1;q<=len;q++)
			g[i]=s[len-i]-'0';
}

还有一种方法是直接用循环+数组的方法读入数据
2.高精度数位数的确定
接受用的是字符串,它的位数等于字符串的长度,注意,字符串是从0开始的。
3.进位与、借位的处理,我个人觉得就像是写竖式一样
加法的进位

c[i]=a[i]+b[i];
if(c[i]>=10)
{
c[i]%=10;++c[i+1];
}

减法借位

if(a[i]<b[i])
{
--a[i+1];++c[i+1];
}

乘法进位

c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
x=c[i+j-1]/10;//最多有几个十
c[i+j-1]%=10;

好了这里就是今天的算法部分了!
古德拜!
诶诶,1169大整数减法代码还没给大家呢!嘴瓢了!
来看代码!

#include<bits/stdc++.h>
using namespace std;
int a[210],b[210],lena,lenb;
string a1,b1;
int main(){
    cin>>a1>>b1;
    lena=a1.size();
    lenb=b1.size();
    for(int i=0;i<lena;i++)a[i]=a1[lena-i-1]-'0';
    for(int i=0;i<lenb;i++)b[i]=b1[lenb-i-1]-'0';
    for(int i=0;i<lena;i++)a[i]-=b[i];
    for(int i=0;i<lena;i++)
        if(a[i]<0){
            a[i]+=10;
            a[i+1]--;
        }
    while(lena&&a[lena]==0)lena--;
    for(int i=lena;i>=0;i--)cout<<a[i];
    cout<<endl;
}

这下才可以说古德拜了!
好了今天屁孩君就给大家分享到这里了!
古德拜!
记得三连哦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值