平平无奇的编程萌新 2022-04-09 18:20 采纳率: 95.2%
浏览 29
已结题

知识精讲 -- 高精度减法

接下来,我们看看要如何计算一个高精度整数和一个高精度整数的减法操作。首先有一个高精度减法的特殊情况:如果第一个数小于第二个数,我们要怎么去计算它们两个的差呢?我们可以在结果的最前面加上一个负号,并交换这两个数,这样最终结算的结果就和我们期望的一致了。例如,我们要计算 2-5的结果,应该为 -3,那么我们首先写出一个负号,然后计算 5-2 的值并输出。比较两个高精度数大小可以先比较两个数的位数,位数不同时位数少的小,位数相同时可以从最高位开始比较,遇到某一位不同,比较小的就小,此时其实比较的也是两个数本身的字典序,字典序小的就小。这样,我们就可以把问题简化了。现在我们需要解决的是,如何计算两个高精度整数的减法结果,保证前一个数不小于后一个数。
高精度减法
输入两个长度不超过 1000 位的整数 a 和 b,输出 a−b 的差,结果可能为负数。
输入格式
两行,每行一个不超过 1000 位的整数
输出格式
输出 a-b 的差
输入样例
3333333333333333333333333333333333333333
2222222222222222222222222222222222222222
输出样例
1111111111111111111111111111111111111111
我这里不知道为什么错了大家能否帮我看看

#include <bits/stdc++.h>
using namespace std;
int main(){
    string numa,numb;
    int a[1001]={}, b[1001]={}, c[1001]={};
    cin>>numa>>numb;
    int len1 = numa.size();
    int len2 = numb.size();
    int len3 = max(len1, len2);
    if((numa.size() < numb.size()) || (numa.size() == numb.size() && numa < numb)){
        cout<<"-";
        swap(numa,numb);
    }
    for (int i = 1; i <= len1; i++) {
        a[i]=numa[len1-i]-'0';
    }
    for (int i = 1; i <= len2; i++) {
        b[i]=numb[len2-i]-'0';
    }
    for (int i = 1; i <= len3; i++) {
        c[i]=a[i]-b[i];
    }
    for (int i = 1; i <= len3; i++) {
        if(c[i] < 0){
            c[i + 1]--;
            c[i] += 10;
        }
    }
    while (len3 > 1 && c[len3] == 0) {
        len3--;
    }
    for(int i=len3;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 对象被抛出 2022-04-09 18:32
    关注

    a, b,c一开始要memset为0
    其余部分暂时没看到严重的错误

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 修改了问题 4月9日
  • 创建了问题 4月9日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测