2301_79584488 2024-02-08 21:10 采纳率: 80%
浏览 4
已结题

高精度减法C语言洛谷

img

img


洛谷,高精度减法,本人发现不了自己的代码的错误,希望指出,谢谢
洛谷,高精度减法,本人发现不了自己的代码的错误,希望指出,谢谢

  • 写回答

3条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-08 21:13
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    很抱歉,由于您没有提供具体的代码,我无法直接指出您的错误所在。但根据题目要求,高精度减法在C语言中实现时,一般需要注意以下几点:

    1. 预处理阶段:确保两个高精度数的位数,并进行适当填充0或者借位操作,使被减数的位数大于等于减数。

    2. 减法过程:

      • 从最低位开始逐位相减,如果被减数小于减数,则需要向高位借位(相当于十进制中的借一当十)。
      • 进行循环遍历,直到所有位都处理完毕。
    3. 结果处理:

      • 结果去除前导零,保证结果的有效性。

    下面是一个简单的高精度减法示例(不考虑负数情况):

    #include<stdio.h>
    #include<string.h>
    
    void sub(char* a, char* b, char* res) {
        int len_a = strlen(a);
        int len_b = strlen(b);
        int borrow = 0;
        
        for(int i=len_a-1, j=len_b-1; i >= 0 || j >= 0; --i, --j) {
            int num_a = i >= 0 ? a[i] - '0' : 0;
            int num_b = j >= 0 ? b[j] - '0' : 0;
            
            num_a -= borrow;
            if(i >= 0 && j >= 0) {
                num_a -= num_b;
            }
            
            borrow = num_a < 0;
            if(borrow) {
                num_a += 10;
            }
            
            res[i-(len_a-len_b)] = num_a + '0';
        }
        
        // 去除前导零
        int start = 0;
        while(start < len_a-len_b && res[start] == '0') {
            ++start;
        }
        res[start] = '\0';  // 注意字符串结束符
    
        // 如果结果为空(全为前导零),则表示结果为0
        if(start == len_a-len_b) {
            res[0] = '0';
            res[1] = '\0';
        } else {
            for(int i=start, j=0; i < len_a-len_b; ++i, ++j) {
                res[j] = res[i];
            }
            res[len_a-len_b-start] = '\0';
        }
    }
    
    int main() {
        char a[1000], b[1000], res[1000];
        // 读入高精度数字a和b...
        sub(a, b, res);
        printf("%s\n", res);
        return 0;
    }
    

    请您对照以上代码检查您的实现,看看是否存在类似逻辑上的错误或遗漏。如果您能提供具体的代码,我可以帮助您更准确地找出问题所在。

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

报告相同问题?

问题事件

  • 系统已结题 2月29日
  • 已采纳回答 2月21日
  • 创建了问题 2月8日

悬赏问题

  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型