C++高精度算法之高精度减法

来源:互联网 发布:夜间灯光数据 编辑:程序博客网 时间:2024/06/07 13:27

高精度减法

题目描述

高精度减法

输入

两个整数a,b(第二个可能比第一个大)

输出

结果(是负数要输出负号)

样例输入

21

样例输出

1

说明

20%数据a,b在long long范围内

100%数据0<a,b<=10^10000

题目解析

样例解析:

  2

-1

    

  1

实现代码

代码如下:

#include<iostream>#include<string>using namespace std;int main(){    string sd,se,sa;    int a[100001]{0},b[100001]{0},c[100001]{0},mc,me,mz,n,mo=0;    cin>>sd>>se;    mc=sd.size();    me=se.size();    if(mc<me||mc==me&&sd<se){sa=sd;sd=se;se=sa;n=mc;mc=me;me=n;mo=-1;}     for(int i=1;i<=mc;i++) a[i]=sd[mc-i]-'0';    for(int i=1;i<=me;i++) b[i]=se[me-i]-'0';    int i=1,o=0;    while(i<=mc||i<=me)    {        if(a[i]<b[i]){a[i+1]--;a[i]+=10;}        c[i]=a[i]-b[i];        i++;    }    mz=i;while(c[mz]==0&&mz>1)mz--;    if(mo==-1) cout<<"-";    for(int i=mz;i>=1;i--) cout<<c[i];    return 0;}

感想总结

面对高精度类型的题我们只需要像竖式一样从低位到高位计算,最后进行处理。


原创粉丝点击