笔试狂刷--Day2(模拟高精度算法)

大家好,我是LvZi,今天带来笔试狂刷--Day2(模拟高精度算法)
在这里插入图片描述

一.二进制求和

题目链接:二进制求和
分析:
在这里插入图片描述

代码实现:

class Solution {public String addBinary(String a, String b) {int c1 = a.length() - 1, c2 = b.length() - 1, t = 0;StringBuffer ret = new StringBuffer();while(c1 >=0 || c2 >= 0 || t != 0) {if(c1 >= 0) t += a.charAt(c1--) - '0';// 保证不为空if(c2 >= 0) t += b.charAt(c2--) - '0';// 保证不为空char ch = (char)((t % 2) + '0');ret.append(ch);t /= 2;// 存储进位}return ret.reverse().toString();}
}

二.大数相加(十进制求和)

大数相加(十进制求和)

代码实现:
1.模拟

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 计算两个数之和* @param s string字符串 表示第一个整数* @param t string字符串 表示第二个整数* @return string字符串*/public String solve (String a, String b) {// write code hereint c1 = a.length() - 1, c2 = b.length() - 1, t = 0;StringBuffer ret = new StringBuffer();while(c1 >=0 || c2 >= 0 || t != 0) {if(c1 >= 0) t += a.charAt(c1--) - '0';// 保证不为空if(c2 >= 0) t += b.charAt(c2--) - '0';// 保证不为空char ch = (char)((t % 10) + '0');ret.append(ch);t /= 10;// 存储进位}return ret.reverse().toString();}
}

2.使用Java内置的BigInteger

import java.util.*;
import java.math.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 计算两个数之和* @param s string字符串 表示第一个整数* @param t string字符串 表示第二个整数* @return string字符串*/public String solve (String s, String t) {// write code hereBigInteger a = new BigInteger(s);BigInteger b = new BigInteger(t);BigInteger ret = a.add(b);return ret.toString();}
}

三.大数乘法

大数乘法
分析:
在这里插入图片描述

代码实现:
1.

import java.util.*;
import java.math.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串 第一个整数* @param t string字符串 第二个整数* @return string字符串*/public String solve (String ss, String tt) {// write code herechar[] s = new StringBuffer(ss).reverse().toString().toCharArray();char[] t = new StringBuffer(tt).reverse().toString().toCharArray();int n = s.length, m = t.length;int[] tmp = new int[m + n];for(int i = 0; i < n; i++)for(int j = 0; j < m; j++) tmp[i + j] += (s[i] - '0') * (t[j] - '0');// 模拟加法int c = 0;StringBuffer ret = new StringBuffer();for(int x : tmp) {c += x;ret.append((char)(c % 10 + '0'));c /= 10;}// 处理前导零while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0') {ret.deleteCharAt(ret.length() - 1);}return ret.reverse().toString();}
}

2.使用BigInteger

import java.util.*;
import java.math.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串 第一个整数* @param t string字符串 第二个整数* @return string字符串*/public String solve (String s, String t) {// write code hereBigInteger a = new BigInteger(s);BigInteger b = new BigInteger(t);BigInteger ret = a.multiply(b);return ret.toString();}
}

四.两数相加I(链表)

题目链接:两数相加I
代码实现:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode cur1 = l1;ListNode cur2 = l2;ListNode phead = new ListNode(0);ListNode cur = phead;// 用于尾插int t = 0;// 用于表示本次相加的结果  处理进位// 要注意t最后可能不为0 要进一位while(cur1 != null || cur2 != null || t != 0) {// 加上第一个节点if(cur1 != null) {t += cur1.val;cur1 = cur1.next;}// 加上第二个节点if(cur2 != null) {t += cur2.val;cur2 = cur2.next;}ListNode newNode = new ListNode(t % 10);t /= 10;// 尾插cur.next = newNode;cur = newNode;}return phead.next;}
}

五.两数相加II(链表逆序)

题目链接:两数相加II(链表逆序)
代码实现:

import java.util.*;/** public class ListNode {*   int val;*   ListNode next = null;*   public ListNode(int val) {*     this.val = val;*   }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param head1 ListNode类* @param head2 ListNode类* @return ListNode类*/public ListNode addInList (ListNode head11, ListNode head22) {// write code hereListNode h1 = reverse(head11), h2 = reverse(head22), ret = new ListNode(0), phead = ret;ListNode c1 = h1, c2 = h2;int t = 0;while (c1 != null || c2 != null || t != 0) {if (c1 != null) {t += c1.val;c1 = c1.next;}if (c2 != null) {t += c2.val;c2 = c2.next;}ListNode tmp = new ListNode(t % 10);t /= 10;phead.next = tmp;phead = phead.next;}// 逆序最后的结果return reverse(ret.next);}// 逆序链表private ListNode reverse(ListNode head) {ListNode phead = new ListNode(0), cur = head;while (cur != null) {ListNode curNext = cur.next;cur.next = phead.next;phead.next = cur;cur = curNext;}return phead.next;}
}

总结:

  1. 高精度算法本质上就是模拟竖式运算,高精度加法通过变量t和进制来确定每次相加的结果和保存响应的进位;高精度乘法实际上是模拟了无进位相乘再相加的过程,使用数组保存当前位置结果的总和,最后再对整个数组模拟十进制相加即可(注意可能的前导0)
  2. 注意模拟过程中的顺序,需要从最低位开始模拟,以及注意最后的返回结果(有的需要逆序)
  3. 在Java中,如果涉及到高进度的加减法,可以使用自带的BigInteger

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云免费ssl证书申请与宝塔手动部署

1.在我的证书 - SSL 证书 - 控制台 (tencent.com)页面点击“申请免费证书” 2.在申请页面填写域名、邮箱&#xff0c;对于其中“验证方式”&#xff0c;如果服务器是部署在腾讯云的话&#xff0c;可以选“自动DNS” 3.等待审核通过之后&#xff0c;在我的证书 - SSL 证书 - 控…

4.9 启动系统任务❤❤❤

有一些特殊的任务需要在系统启动时执行&#xff0c;例如配置文件加载、数据库初始化等操作。 Spring Boot对此提供了两种解决方案&#xff1a;CommandLineRunner和ApplicationRunner。 CommandLineRunner和ApplicationRunner基本一致&#xff0c;差别主要体现在参数上。 1. Co…

FastChat启动与部署通义千问大模型

FastChat简介 FastChat is an open platform for training, serving, and evaluating large language model based chatbots. FastChat powers Chatbot Arena, serving over 10 million chat requests for 70 LLMs.Chatbot Arena has collected over 500K human votes from sid…

[SWPUCTF 2022 新生赛]android

安卓题第一次写 先解压&#xff0c;改apk后缀为zip再次解压用dex2jar反编译得到jar文件&#xff0c;再用jd-gui查看即可得到flag

AI大模型日报#0418:Stable Diffusion 3开放API、Meta新研究让AI Agent理解物理世界

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 微软刚发布了VASA-1 这个人工智能可以让单张图像具有生动的说话和歌唱能力 摘要: 微软发布了VASA-1人工智能&#xff0c;它能使单…

Webstorm 24.1 复制、剪切卡死问题官方回复

Webstorm 24.1 复制、剪切卡死问题官方回复 https://youtrack.jetbrains.com/issue/WEB-65787/WebStorm-2024.1-UI-was-frozen-for-N-ms-after-copy-paste 2024-04-20 更新&#xff1a; UI 卡死问题已于 2024-04-20。发布的 24.1.1 版本解决

Spark集群的搭建

1.1搭建Spark集群 Spark集群环境可分为单机版环境、单机伪分布式环境和完全分布式环境。本节任务是学习如何搭建不同模式的Spark集群&#xff0c;并查看Spark的服务监控。读者可从官网下载Spark安装包&#xff0c;本文使用的是spark-2.0.0-bin-hadoop2.7.gz。 1.1.1搭建单机版…

Linux——进程基本概念中篇

Linux——进程基本概念中篇 文章目录 Linux——进程基本概念中篇一、通过系统调用创建进程——fork1.1 fork的理解1.2 fork的返回值 二、进程状态2.1 运行状态2.2 睡眠状态和休眠状态2.3 停止状态和死亡状态2.4 僵尸进程2.5 孤儿进程2.6 前台和后台进程 三、进程优先级3.1 查看…

【QT教程】QT6物联网应用

QT6物联网应用 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费Q…

大模型入门相关文章

1.了解国内外大模型发展现状188个大模型和20个开源基础模型&#xff0c;《2023大模型产业发展白皮书》全面解析国内外大模型发展情况 - 知乎 (zhihu.com) 2.垂直领域&#xff0c;美妆大模型 关于懂美学的视觉大模型&#xff0c;我们问了美图 21 个问题 - 知乎 (zhihu.com) 3…

在C语言中如何找到字符串的长度

在C语言中处理字符串时&#xff0c;你需要知道如何找到它们的长度。 在许多情况下&#xff0c;找到C语言中字符串的长度都是至关重要的。 你可能需要执行字符串操作&#xff0c;而许多字符串操作函数都需要字符串的长度作为参数。你可能还需要验证用户输入、比较两个字符串&a…

一文读懂Partisia Blockhain:兼顾去中心化、安全性与可扩展性

“Partisia Blockhain 解决了区块链领域长期存在的问题&#xff0c;其兼顾了去中心化、安全性以及可扩展性” Partisia Blockchain 是一个具有独特零知识证明预言机以及分片解决方案的 Layer1&#xff0c;解决了困扰整个区块链行业的问题。 目前&#xff0c;多样化的区块链层出…

个人开发微信小程序?我来劝退!

为什么小程序那么受欢迎&#xff1f; 相比传统app&#xff0c;小程序即点即用&#xff0c;免下载安装&#xff0c;这是小程序最明显的优势 但使得小程序真正能火爆&#xff0c;让众多开发者喜欢的原因&#xff0c;还是其强大的分享能力和多端互通能力。寄生与微信这么一个聊天…

SRIO系列-基本概念及IP核使用

参考&#xff1a;串行RapidIO: 高性能嵌入式互连技术 | 德州仪器 SRIO协议技术分析 - 知乎 PG007 目录 一、SRIO介绍 1.1 概要 1.2 SRIO与传统互联方式的比较 1.3 串行SRIO标准 1.4 SRIO层次结构&#xff1a; 1.4.1 逻辑层 1.4.2 传输层协议 1.4.3 物理层 二、Xilinx…

全量知识系统 程序详细设计 之“因果关系模型”(QA百度文库)

Q1. 今天聊聊全量知识系统&#xff08;简称“全知系统”&#xff09;中 对“因果”的理解。&#xff08;地位、意义和作用&#xff09; 在全量知识系统&#xff08;全知系统&#xff09;中&#xff0c;“因果”是一个核心概念&#xff0c;具有极其重要的地位、意义和作用。 首…

BADI-AC_DOCUMENT-交货单过账科目替代

BADI-AC_DOCUMENT-交货单过账科目替代 一、业务场景 事务代码VL02N/VL22N及其他交货单过账事务&#xff0c;在交货单过账生成会计凭证的时候对科目进行替代 二、BADI增强&#xff1a;AC_DOCUMENT 这个BADI理论上可以处理很多的会计凭证科目替代&#xff0c;不止是交货单过账…

服务注册与发现Eureka、Zookeeper、Consul 三个注册中心的异同点(CAP理论)

Eureka Eureka是由Netflix开源的一个服务注册和发现组件&#xff0c;它主要用于构建高可用、分布式系统的基础设施中。Eureka的服务器端被称为Eureka Server&#xff0c;客户端则是那些需要注册的服务。Eureka具有以下特点&#xff1a; 高可用性&#xff1a;Eureka支持多节点…

java:Java中的String详解

目录 前言&#xff1a; String类的常用方法 1.构造方法&#xff1a; 2.字符串比较&#xff1a; 3.字符串查找&#xff1a; 4.字符串转化&#xff1a; StringBuffer和StringBuilder: 强大的字符串处理工具 1. StringBuffer和StringBuilder的作用和区别 2. StringBuilder…

ModuleNotFoundError: No module named google.protobuf 亲测有效

真的无语了每次都是环境bug&#xff0c;这次又遇上了ModuleNotFoundError: No module named google.protobuf 我先尝试了 pip uninstall protobuf pip uninstall google pip install google pip install protobuf接着还是没起色&#xff0c;我试了试 conda install -c anaco…

探索通过GPT和云平台搭建网安实战培训环境

项目背景 网络安全是一个不断演变的领域&#xff0c;面临着日益复杂的挑战和不断扩大的威胁。数字化时代&#xff0c;随着勒索攻击、数据窃取、网络钓鱼等频频出现&#xff0c;网络攻击的威胁指数和影响范围进一步增加&#xff0c;如何防范网络攻击&#xff0c;确保数据安全&a…