关于样例存在的漏洞
查看原帖
关于样例存在的漏洞
1476507
MChotleg楼主2024/10/7 14:36

大数减法程序与问题说明

这个程序实现了大数减法的功能,能够处理非常大的整数。然而,在我测试的过程中,发现了一个问题:当输入 521 - 520 时,程序的输出是 001,而正确的结果应该是 1。这表明代码在处理某些特殊情况下无法正常运行。

尽管如此,我提交了这段代码并得到了满分,这说明样例测试数据可能存在缺陷,未能有效覆盖这些特殊情况。

源代码

#include <stdio.h>
int max(int a, int b)
{
    int max = a;
    if (a > b)
    {
        max = a;
    }
    else
    {
        max = b;
    }
    return max;
}
int len(char *a)
{
    int cnt = 0;
    for (int i = 0; i > -1; i++)
    {
        if (a[i] != 0)
        {
            cnt++;
        }
        else
        {
            break;
        }
    }
    return cnt;
}
// -1是相等,1是a大于b,0是a小于b
int compare(char *a, char *b){
    if(len(a) > len(b)){
        return 1;
    }else if(len(a) < len(b)){
        return 0;
    }else{
        for (int i = 0; i < len(a); i++){
            if(a[i] > b[i]){
                return 1;
            }else if(a[i] < b[i]){
                return 0;
            }
        }
        return -1;
    }
}
void copy(char *a, char *b)
{
    for (int i = 0; i < len(b); i++)
    {
        a[i] = b[i];
    }
    a[len(b)] = 0;
}
int main(){
    int tag = 1;
    char s1[10090], s2[10090], s3[10090];
    int a[10090], b[10090], c[10090];
    scanf("%s", s1);
    scanf("%s", s2);
    int l1 = len(s1);
    int l2 = len(s2);
    int j = compare(s1, s2);
    if(j == 0){
        copy(s3, s1);
        copy(s1, s2);
        copy(s2, s3);
        tag = -1;
    }
    int la = len(s1);
    int lb = len(s2);
    int lc = max(la, lb);
    for (int i = 0; i < la; i++){
        a[la - 1 - i] = s1[i] - '0';
    }
    for (int i = 0; i < lb; i++){
        b[lb - 1 - i] = s2[i] - '0';
    }
    for (int i = 0; i < lc; i++){
        if(a[i] < b[i]){
            a[i + 1]--;
            a[i] += 10;
        }
        c[i] = a[i] - b[i];
    }
    if(tag == -1){
        printf("%c", '-');
    }
    if(j != -1){
        int cnt = 0;
        for (int i = 0; i < lc; i++){
            printf("%d", c[lc - 1 - i]);
        }
    }else{
        printf("%d", 0);
    } 
}
2024/10/7 14:36
加载中...