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

长春做网站公司哪家好做统计图的网站

长春做网站公司哪家好,做统计图的网站,wordpress缓存首页,做名片上什么网站大数乘法 1. 题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 数据范围: 读入的数字大小满足 0≤n≤1010000≤n≤101000 要求:空间复杂度 O(m)O(m),时间复杂度 O(m2)O(m2)&am…

大数乘法

1. 题目描述

以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。

数据范围: 读入的数字大小满足 0≤n≤1010000≤n≤101000

要求:空间复杂度 O(m)O(m),时间复杂度 O(m2)O(m2)(假设m是n的长度)

示例:
输入: "11", "99"
输出: "1089"输入: "1", "0"
输出: "0"

2. 解题思路

根据列竖式运算的过程模拟即可。具体步骤如下:

1. 反转字符串:将输入的两个字符串反转,以便从低位到高位进行逐位相乘。
2. 无进位相乘相加:创建一个数组 tmp 来存储每一位相乘的结果。对于每个字符,将其转换为对应的整数值,并进行相乘操作,结果存入 tmp 数组中对应的位置。
3. 处理进位:遍历 tmp 数组,处理每一位的进位,确保每一位的值在 0 到 9 之间。
4. 构建结果字符串:将处理后的 tmp 数组中的值依次添加到 StringBuilder 中,形成最终的结果字符串。
5. 删除前导零:检查并删除结果字符串中的前导零,如果结果为空,则返回 "0"。

3. 代码实现


import java.util.*;public class Solution {public String solve(String ss, String tt) {// 将输入字符串 ss 和 tt 反转,并转换为字符数组 sArray 和 tArray。// 这样做的目的是为了方便从低位到高位进行逐位相乘。char[] sArray = new StringBuilder(ss).reverse().toString().toCharArray();char[] tArray = new StringBuilder(tt).reverse().toString().toCharArray();// m 和 n 分别是两个输入字符串的长度。int m = sArray.length, n = tArray.length;// tmp 数组用于存储每一位相乘的结果。它的大小是 m + n,// 因为两个数相乘的最大长度不会超过它们各自长度之和。int[] tmp = new int[m + n];// 1. 无进位相乘相加:// 对于 sArray 中的每一个字符和 tArray 中的每一个字符,// 计算它们对应的数字(通过减去 '0' 的ASCII值),并将它们的乘积累加到 tmp 数组中的相应位置。for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {tmp[i + j] += (sArray[i] - '0') * (tArray[j] - '0');}}// 2. 处理进位:// 遍历 tmp 数组,处理每一位的进位问题。// sum 表示当前位的值加上前一位的进位值,然后更新当前位的值为 sum % 10,// 并将新的进位值 c 更新为 sum / 10。int c = 0;for (int i = 0; i < tmp.length; i++) {int sum = tmp[i] + c;tmp[i] = sum % 10;c = sum / 10;}// 将结果添加到 StringBuilder 中:// 创建一个 StringBuilder 对象 ret,用于构建最终的结果字符串。// 注意这里避免了添加不必要的前导零。StringBuilder ret = new StringBuilder();for (int x : tmp) {if (!(ret.length() == 0 && x == 0)) { // 避免添加前导零ret.append(x);}}// 如果在上一步之后仍有未处理的进位,则继续添加到结果中。while (c > 0) { // 处理最后的进位ret.append(c % 10);c /= 10;}// 3. 处理前导零:// 删除结果字符串中的前导零。如果删除后结果为空,则返回 "0"。while (ret.length() > 0 && ret.charAt(0) == '0') {ret.deleteCharAt(0);}// 返回反转后的结果字符串。因为我们在开始时反转了输入字符串,// 所以现在需要再次反转来获得正确的顺序。return ret.length() == 0 ? "0" : ret.reverse().toString();}
}

4. 复杂度分析

时间复杂度:O(m^2),其中 m 是较长字符串的长度。这是因为在最坏情况下,我们需要对每个字符进行两层嵌套循环的相乘操作。
空间复杂度:O(m),用于存储中间结果和最终结果字符串。

5. 总结

通过模拟竖式乘法的过程,我们可以有效地解决大数乘法问题。关键在于正确处理每一位的相乘、进位以及最终结果的构建。使用 StringBuilder 可以方便地进行字符串的拼接和反转操作,从而简化代码实现。此外,注意处理特殊情况,如前导零和空字符串的情况,以确保算法的健壮性。

http://www.dtcms.com/a/469935.html

相关文章:

  • 【Android Gradle学习笔记】第一天:认识下Gradle
  • 一级a做爰片免费网站孕交视频教程wordpress添加作者名字
  • 《基础算法递归-----汉诺塔问题》
  • 网站前台设计模板荆州网站建设 松滋网站建设
  • 【agent】AI 数字人构建8:本地edge-tts实现 tts
  • 做网站的法律贵州门户网站建设
  • 创建公司网站需要什么外贸网站系统
  • MySQL字符集与排序规则全解析
  • 在云计算环境中实施有效的数据安全策略
  • 建设电子商务网站的意义巴中市建设厅官方网站
  • DES 加密算法:核心组件、加解密流程与安全特性
  • 游戏怎么做充值网站天津市建设工程监理公司网站
  • 01-Python简介与环境搭建-练习
  • Flink面试题及详细答案100道(81-100)- 部署、优化与生态
  • 机器学习实践项目(一)- Rossman商店销售预测 - 预处理数据
  • spring-Integration
  • SQL核心语言详解:DQL、DML、DDL、DCL从入门到实践!
  • 相亲网站怎么做的免费做网站tk
  • 在阿里巴巴上做网站要多少钱怎样制作自己的app
  • 数据湖Hudi - 二级索引:配置方法、存储位置与自动构建全解析(附电商实操案例)
  • 基于K近邻(KNN)算法的高光谱数据分类MATLAB实现
  • 石油网页设计与网站建设万网如何上传网站
  • 乐迪信息:智慧煤矿输送带安全如何保障?AI摄像机全天候识别
  • VMware vCenter 基础命令的 6 大核心模块
  • 龙华建设局网站做社区生意的网站
  • 【STM32项目开源】基于STM32的智能语音台灯系统
  • 构建和部署Spark、Hadoop与Zeppelin集成环境
  • 网站建设引擎广西住房和城乡建设厅领导班子
  • 把dxf转化成图片喂给vlm实现图纸检查比如尺寸有没有漏标
  • C++基础:(十一)vector深度剖析:底层原理与模拟实现