大家学过高精度加法之后,想必一定想知道高精度减法怎么实现了吧!
高精度加法和加法有共同之处,比如倒序储存······
什么?你说你没学过高精度加法?快来看这里(非常详细哦)–>高精度加法 【c++实现】
减法里需要注意的就是负数问题了!其他和加法一样。
对位相减的时候减出来是负数咋办?很简单,高位减一,本位加10
计算 a - b 的时候如果 a < b ,减出来是个负数咋办?如下样例:
这样子直接计算 a - b ,肯定不行,所以我们就要分成两种情况:
- a > b
直接计算就好了,对位相减, 做好借位就没问题。 - a < b
这个时候,负数了,所以要做 b - a ,保证结果是整数,同时用一个变量(我用的flag记录,flag==1表示结果为负)记录正负。
具体详解都写在代码注释里了,这里就不再多赘述了(真的是几乎每一行都写了注释)。
代码如下:#include#include #include using namespace std; int main(){ //计算 a - b = ans int i,j,flag=0; //flag用来记录是否为负数, 1代表负数, 默认为0即正数 string a_s,b_s; //用字符串接受两个数字 int a[521]={0},b[521]={0},ans[521]={0}; //三个存数字数组, 记得初始化为0 cin>>a_s>>b_s; //接受输入的字符串型 a 和 b 存到 a_s 和 b_s 里 int len_a=a_s.length(),len_b=b_s.length(); //计算 a 和 b 的长度 int len=len_a>len_b?len_a:len_b; //计算 a 和 b 的最大长度, 确定做减法时的循环次数 for(i=0;i len_b||len_a==len_b&&a[len_a-1]>=b[len_b-1]){ //当 a 大于 b 时 for(i=0;i if(a[i] //当对应位 a < b 时, 向高位借位 a[i+1]--; //高位减1 a[i]+=10; //这一位加10 } ans[i]=a[i]-b[i]; //做减法 } } else{ //当 a 小于 b 时, a - b 为负数, 所以变为 b - a, 保证减法结果为正 flag=1; //负数标记 for(i=0;i if(b[i] //借位 b[i+1]--; b[i]+=10; } ans[i]=b[i]-a[i]; } } if(flag) cout<<"-"; //输出负号 while(ans[len]==0&&len>0) len--; //去掉前置无用的 0 for(i=len;i>=0;i--){ //倒序输出结果 cout< OK啦!
看完点个赞可以嘛,你的点赞是博主更新的最大动力!!!



