来自M78的光之文轩 2022-10-10 22:36 采纳率: 92%
浏览 42
已结题

NOI的大整数减法代码找不到错误

哪位帮我看一下错哪了,题目在http://noi.openjudge.cn/ch0106/11/

#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char a[250],b[250];
    fgets(a,250,stdin);
    fgets(b,250,stdin);    //把数据储存在字符中 
    int A[250],B[250];
    int i,n=strlen(a)-1,m=strlen(b)-1;
    for(i=0;i<n;i++){
        A[i]=a[n-1-i]-'0';
    }
    for(i=0;i<m;i++){
        B[i]=b[m-1-i]-'0';    //把字符转换为数字 ,并反向 
    } 
    for(i=m;i<n;i++){    //把空的位置用0填上,使两数位数一致
        B[i]=0;
        m=n;
    }
    int c[250],q,p=0;
    for(i=0;i<m;i++){      //设C,储存A-B 
        q=A[i]-B[i]-p;
        if(q<0){
            p=1;
            q+=10;
        }
        else p=0;
        c[m-1-i]=q;
    }
    for(i=0;c[i]==0&&i<m;i++){    //除去多余的前导0 
    }
    for(;i<m;i++){
        cout<<c[i];    //输出答案 
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 关注

    因为你没有处理两个数相等的情况,如果两个数相等,你的代码没有任何输出,需要在去除前导0的下面加一个判断,如下图所示:

    img

    完整代码如下:

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main() {
        char a[250], b[250];
        fgets(a, 250, stdin);
        fgets(b, 250, stdin);    //把数据储存在字符中 
        int A[250], B[250];
        int i, n = strlen(a) - 1, m = strlen(b) - 1;
        for (i = 0; i < n; i++) {
            A[i] = a[n - 1 - i] - '0';
        }
        for (i = 0; i < m; i++) {
            B[i] = b[m - 1 - i] - '0';    //把字符转换为数字 ,并反向 
        }
        for (i = m; i < n; i++) {    //把空的位置用0填上,使两数位数一致
            B[i] = 0;
            m = n;
        }
        int c[250], q, p = 0;
        for (i = 0; i < m; i++) {      //设C,储存A-B 
            q = A[i] - B[i] - p;
            if (q < 0) {
                p = 1;
                q += 10;
            }
            else p = 0;
            c[m - 1 - i] = q;
        }
        for (i = 0; c[i] == 0 && i < m; i++) {    //除去多余的前导0 
        }
        //修改,添加这个判断
        if (i == m)
        {
            cout << "0";
            return 0;
        }
        for (; i < m; i++) {
            cout << c[i];    //输出答案 
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月11日
  • 已采纳回答 10月11日
  • 创建了问题 10月10日

悬赏问题

  • ¥50 swiftui @query 报错
  • ¥50 怎么解决刷卡或扫码后,点击软件输入框,win10屏幕键盘不会自动弹出的问题
  • ¥15 如何使用arcgispro的训练深度模型,发现water和nowater精度为0?(相关搜索:深度学习)
  • ¥20 matlab作业不太懂呀有问题能给个代码吗
  • ¥15 自制电路图为何无法驱动ESP01S?
  • ¥15 前端加access数据库
  • ¥15 ARCGIS 多值提取到点 ERROR 999999
  • ¥15 mysql异常断电, [MY-011971] [InnoDB]
  • ¥15 uni.onBluetoothDeviceFound熄屏不运行
  • ¥15 求PHDA糖尿病并发症数据集,有偿