With my life to fight 2023-02-07 10:53 采纳率: 100%
浏览 26
已结题

c语言的高精度减法出错

问题遇到的现象和发生背景

dev5.11高精度减法

遇到的现象和发生背景,请写出第一个错误信息

无输出

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include<stdio.h>
#include<string.h>
int main()
{
    void High_Precision_Subtraction(char subtrahend[], int length_subtrahend, char subtractor[], int length_subtractor, int answer[], int size_answer, int* flag);
    char a[100], b[100];
    int c[100];
    scanf("%s", a);
    scanf("%s", b);
    int l1, l2, l3;
    l1 = strlen(a);
    l2 = strlen(b);
    l3 = (l1 > l2) ? l1 : l2;
    int flag;
    High_Precision_Subtraction(a[100], l1, b[100], l2, c[100], l3, &flag);
    if (flag != 0)
    {
        printf("%s", c[100]);
    }
    else
    {
        printf("0");
    }
    return 0;
}
void High_Precision_Subtraction(char subtrahend[], int length_subtrahend, char subtractor[], int length_subtractor, int answer[], int size_answer, int* flag)
{
    //为了保证输入输出的格式统一,所以传入了answer这个指针,而不是直接在原字符串进行加减
    int length_max, length_min;
    if (length_subtrahend < length_subtractor)
    {
        length_max = length_subtractor;
        length_min = length_subtrahend;
    }
    else
    {
        length_max = length_subtrahend;
        length_min = length_subtractor;
    }
    //确定长度
    int temp_ans[100]={0};
    //memset(temp_ans, 0, sizeof(temp_ans));
    int i;
    if ((length_subtrahend < length_subtractor) || ((length_subtrahend ==length_subtractor) && strcmp(subtrahend, subtractor) < 0)) //先比大小 
    {
        *flag = -1;
        for (i = 0; i < length_min; i++)
        {//个位对齐开始作差
            temp_ans[i] += subtractor[length_max - i - 1] - subtrahend[length_min - i - 1];
            if (temp_ans[i] < 0)
            {//当前位是个负数,就向高位借个1就足够了
                temp_ans[i + 1] -= 1;
                temp_ans[i] += 10;
            }    //完成进位
        }
        for (i = length_min; i < length_max; i++)
        {//把剩下的抄回来
            temp_ans[i] = temp_ans[i] + subtractor[length_max - i - 1] - '0';//temp_ans[min]可能是-1,之后的均为0 
        }
    }
    else if ((length_subtrahend >length_subtractor) || ((length_subtrahend ==length_subtractor) && strcmp(subtrahend, subtractor) >0))
    {
        *flag = 1;
        for (i = 0; i < length_min; i++)
        {
            temp_ans[i] += subtrahend[length_max - i - 1] - subtractor[length_min - i - 1];//倒序 
            if (temp_ans[i] < 0)
            {//当前位是个负数,就向高位借个1就足够了
                temp_ans[i + 1] -= 1;
                temp_ans[i] += 10;
            }    //完成进位        
        }
        for (i = length_min; i < length_max; i++)
        {
            temp_ans[i] = temp_ans[i] + subtrahend[length_max - i - 1] - '0';
        }
    }
    else
    {
        *flag = 0;//两数相等 
    }
    //完成相减,并确保是大数减小数
    int last;
    last = 0;
    for (i = length_max - 1;i >= 0;i--)
    {//找到最高位
        if (temp_ans[i] == 0 && temp_ans[i - 1] != 0)
        {
            last = i;
            break;
        }
    }
    //直接逆着赋值
    for (i = 0;i <= last;i++)
    {
        answer[i] = temp_ans[last - i];//输出到answer里面
    }
}

运行结果及详细报错内容

无输出

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

用vs调试过,不过没看懂

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

3条回答 默认 最新

  • 於黾 2023-02-07 11:08
    关注

    High_Precision_Subtraction(a[100], l1, b[100], l2, c[100], l3, &flag);
    改为
    High_Precision_Subtraction(a, l1, b, l2, c, l3, &flag);
    你现在是连数组定义和数组指针传递都能搞混
    int a[100]表示数组a长度是100
    用的时候直接写a,a本身是数组指针
    而a[100]是数组里第100个元素,索引从0开始,这里越界了
    你后面所有的指针运用都自己检查一遍,应该全是错的
    还有,各种不同的数据应该如何print你也要从头开始学,不要想当然的瞎写

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值