当前位置: 首页 > article >正文

高精度计算

文章目录

  • 1. 高精度加法(67)
  • 2. 高精度乘法(43)


1. 高精度加法(67)

题目描述:
在这里插入图片描述

代码如下:

class Solution {
    public String addBinary(String a, String b) {

        int cur1 = a.length() - 1;
        int cur2 = b.length() - 1;

        int t = 0;
        StringBuilder ret = new StringBuilder();
        while (cur1 >= 0 || cur2 >= 0 || t > 0) {
            if (cur1 >= 0) {
                t += a.charAt(cur1) - '0';
                cur1--;
            }
            if (cur2 >= 0) {
                t += b.charAt(cur2) - '0';
                cur2--;
            }

            ret.append(t % 2);
            t /= 2;

        }

        return ret.reverse().toString();

    }
}

题目链接

2. 高精度乘法(43)

题目描述:
在这里插入图片描述

算法原理:
处理这类问题有个简单的方式就是先使用无进位乘法得到结果后再去处理进位,代码清晰。
代码如下:

class Solution {
    public String multiply(String s, String ss) {
        // 1、准备工作
        int m = s.length(), n = ss.length();
        char[] num1 = new StringBuilder(s).reverse().toString().toCharArray();
        char[] num2 = new StringBuilder(ss).reverse().toString().toCharArray();
        int[] temp = new int[m + n - 1];

        // 2、无进位相乘
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                temp[i + j] += (num1[i] - '0') * (num2[j] - '0');
            }
        }

        // 3、处理进位
        int cur = 0, carry = 0;
        StringBuilder ret = new StringBuilder();
        while (cur < n + m - 1 || carry != 0) {
            if (cur < n + m - 1) {
                carry += temp[cur++];
            }
            ret.append(carry % 10);
            carry /= 10;
        }

        // 4、处理前导0
        while (ret.length() > 1 && ret.charAt(ret.length() - 1) == '0') {
            ret.deleteCharAt(ret.length() - 1);
        }

        return ret.reverse().toString();
    }
}

题目链接


http://www.kler.cn/news/364963.html

相关文章:

  • opencv学习笔记(3):图像和视频的读取(C++)
  • Linux 字符设备驱动 之 无法归类的《杂项设备驱动》
  • 弱口令与命令爆破+DVWA靶场+docker+ARL+Fofa+weakpass
  • yarn的安装与使用以及与npm的区别(安装过程中可能会遇到的问题)
  • 基于HEC-Ras及ArcGIS的泥石流数值模拟与灾害风险评估典型案例
  • 设计模式---模版模式
  • 【安当产品应用案例100集】024-BYOE及BYOK在IaaS场景中的应用
  • 深度学习:网络压缩(Network Compression)详解
  • opencv实战项目(三十三)奥比中光深度相机检测箱盖是否盖严
  • 大数据-188 Elasticsearch - ELK 家族 Logstash Output 插件
  • LinkedList作者:我虽然开发了LinkedList,但是我更爱用ArrayList
  • 【Conda】Conda 超时设置及优化指南:提升包管理效率的关键
  • 【C#】调用本机AI大模型流式返回
  • 十八、行为型(状态模式)
  • Notepad++通过自定义语言实现日志按照不同级别高亮
  • AI写PPT工具:四款人工智能软件全面解析!!
  • 5G超级上行,到底有多行?
  • Spring Boot在线考试系统:JavaWeb技术的最佳实践
  • vue文件报Cannot find module ‘webpack/lib/RuleSet‘错误处理
  • 3.cpp基本数据类型
  • 设计模式(二)工厂模式详解
  • 数据结构_day3
  • 在Spring中,什么是配置类
  • 【C语言】自定义类型:结构体(下)
  • 《首尔破笑组:在欢笑中触摸生活的温度》
  • 给已经写好的裸机程序移植freeRTOS操作系统(二)