笔试狂刷--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,一经查实,立即删除!

相关文章

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 查看…

一文读懂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…

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支持多节点…

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

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

HTML5+CSS3小实例:菜单按钮的三种切换动画

实例:菜单按钮的三种切换动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initia…

漂亮的个人主页源码

源码介绍 漂亮的个人主页源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果截图 源码下载 漂亮的个人主页源码

【正则表达式】正则表达式基本语法元素

目录 字符类量词边界匹配逻辑和分组转义和特殊字符验证正则表达式是否能够成功提取数据 字符类 .&#xff1a;匹配除换行符之外的任何单个字符。 [abc]&#xff1a;匹配方括号内的任何字符。 [^abc]&#xff1a;匹配不在方括号内的任何字符。 [a-z]&#xff1a;匹配任何小写字…

DZY Loves Chemistry (并查集)

//新生训练 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; bool a[60][60]; bool vis[60]; int n; long long int cnt; void bfs(int x) {int y;queue<int> q;v…

真实世界的密码学(二)

原文&#xff1a;annas-archive.org/md5/655c944001312f47533514408a1a919a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第六章&#xff1a;非对称加密和混合加密 本章内容包括 对秘密信息进行加密的非对称加密方法 对数据进行加密到公钥的混合加密方法 非对称和…

互连芯片浪潮席卷AI服务器:突破瓶颈,再创辉煌

改变AI服务器&#xff1a;互连芯片技术创新和突破 AI服务器崛起&#xff0c;引领未来创新根据TrendForce数据&#xff0c;AI服务器出货量达130,000台&#xff0c;占服务器总出货量的1%。主要制造商推出生成式AI产品&#xff0c;推动订单激增。ChatGPT等应用的需求持续增长&…

使用WebSocket实现答题积分排名实时更新的功能

需求分析 接到一个需求&#xff0c;是一个答题积分小程序&#xff0c;其中有一个功能需求是需要实时更新答题积分排名的。之前通常比较常见的需求&#xff0c;都是指定某个时间点才更新答题排行榜的数据的。 经过技术调研&#xff0c;要实现答题积分排名实时更新的功能&#…