大数相加,相减,相乘算法(JAVA代码)

Look4sat蓝牙追星云台 //这是一个追星云台的小程序 //配合Look4sat蓝牙传输数据(W*** A***),并让电机做出动作 //app设置内填好ESP32的蓝牙MAC,数据格式:W$AZ A$EL //希望大家可以共同改进 阅读详情

415. Add Strings(大数相加)

Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.

Note:

  1. The length of both num1 and num2 is < 5100.
  2. Both num1 and num2 contains only digits 0-9.
  3. Both num1 and num2 does not contain any leading zero.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

思想:

从后往前相加。设置个进位的变量。这里c++用到了revervse()函数

C++ AC代码:

Space O(1) Time O(n)

class Solution {
public:
    string addStrings(string num1, string num2) {
	int len1 = num1.size()-1;
        int len2 = num2.size()-1;
        int carry = 0;
        string res ="";
        while(len1>=0||len2>=0||carry){
            int sum = 0;
            if(len1>=0) sum +=num1[len1--]-'0';
            if(len2>=0) sum +=num2[len2--]-'0';
            sum+=carry;
            carry = sum/10;
            sum %=10;
            res = res + to_string(sum);
        }
        reverse(res.begin(),res.end());  //注意要反转一次 
        return res;
    }
};

JAVA AC代码:

Space O(n) Time O(n)

public class Solution {
    public String addStrings(String num1, String num2) {
            int len1 = num1.length()-1;
			int len2 = num2.length()-1;
			int carry = 0;
			int k = Math.max(len1, len2);
			int sum[] = new int[k+1];
			while(len1>=0||len2>=0){
				int temp1 = len1>=0?(num1.charAt(len1)-'0'):0;
				int temp2 = len2>=0?(num2.charAt(len2)-'0'):0;
				int temp = temp1+temp2+carry;
				sum[k] =temp%10;
				carry = temp/10;
				k--;
				len1--;
				len2--;
			}
			StringBuilder s = new StringBuilder();
		    if(carry!=0) s.append(carry);
		    for(int digit:sum){
		    	s.append(digit);
		    }
        return s.toString();
    }
}

大数相减

思想:

先要注意判断,大数减小数正常相减,小数减大数相当于大数减小数前添加个负号
也是从后向前相减,个位开始相减,相减时先加个10,结果模上10就是当前位的值了。判断是否需要从高位借值,相减加10的结果除以10大于1的话就可以判断没有从高位借了值了(模10和除以10 这是个小技巧)

JAVA 代码:

Space O(n) Time O(n) 因为leetcode 貌似没有找到大数相减的题 所以在IDE上写的 可以直接运行

public class testString {

	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			String s1 = sc.next();
			String s2 = sc.next();
			//////////////////  大数串s1 - s2
			int len1 = s1.length();
			int len2 = s2.length();
			if(len1>len2)   //s1长度大于s2 正常相减
				System.out.println(subStract(s1, s2));
			else if(len1<len2){//s1长度小于s2 反向相减 加负号
				System.out.println("-"+subStract(s2, s1));
			}else{ //s1长度等于s2 比较s1和s2值谁大 
				int compare = s1.compareTo(s2);
				if(compare==0) System.out.println(0);
				else if(compare>0)
					System.out.println(subStract(s1, s2));
				else
					System.out.println("-"+subStract(s2, s1));
					
			}
				
		}
	}
	public static String subStract(String num1,String num2){
		int len1 = num1.length()-1;
		int len2 = num2.length()-1;
		int max = len1>len2?len1:len2;
		int brower = 0;
		int res[] = new int[max+1];
		int k = max;
		while(len1>=0 ||len2>=0){
			int div=10; 
			div += len1>=0?num1.charAt(len1)-'0':0;
			div -= len2>=0?num2.charAt(len2)-'0':0;
			div -=brower;
			res[k--] = div%10;
			brower = div/10==0?1:0;
			len2--;
			len1--;
		}
		int i=0;
		if(res[i]==0)
			i++;
		StringBuilder s = new StringBuilder();
		for(int j=i;j<=max;j++){
			
			s.append(res[j]);
		}
		return s.toString();
	}
}

43. Multiply Strings(大数相乘)

Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.

Note:

  1. The length of both num1 and num2 is < 110.
  2. Both num1 and num2 contains only digits 0-9.
  3. Both num1 and num2 does not contain any leading zero.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

思想:

这题的技巧在于复用同一个结果数组存放上次的计算结果。因为被乘数每一位数字和乘数相乘的结果是依次错开的

JAVA AC代码:

public class Solution {
    public String multiply(String num1, String num2) {
            int len1 = num1.length();
			int len2 = num2.length();
			int k = len1+len2,i,j;
			int sum[] = new int[k]; //乘积的结果最多是两个位数之和
			for( i=len1-1;i>=0;i--){
				int carry = 0; //进位数值
				for( j=len2-1;j>=0;j--){
					int temp1 = num1.charAt(i)-'0';
					int temp2 = num2.charAt(j)-'0';
                    ///每一位的乘积等于 之前这一位的结果加上进位的值,加上两数相乘结果
					int temp = temp1*temp2+carry+sum[i+j+1];
					sum[i+j+1] =temp%10;
					carry = temp/10;
				}
				sum[i+j+1] = carry;
			}
			StringBuilder s = new StringBuilder();
  ////去掉前面无用的0
			i=0;
			while(i<k-1&&sum[i]==0) i++;
		    for(;i<k;i++){
		    	s.append(sum[i]);
		    }
        return s.toString();
    }
}

SECS/GEM协议中的关键指令详解:从S1F1到S9F9的完整指南 本文详细解析了SECS/GEM协议中从S1F1到S9F9的关键指令,涵盖设备状态管理、控制诊断、报警处理等核心功能。通过实际案例和调试技巧,帮助开发者掌握半导体制造设备通信标准,解决SECS/GEM协议在实际工程应用中的通讯难题,提升生产线智能化水平。 阅读详情

相关推荐

应急响应-勒索病毒典型处置案例

服务器感染Globelmposter勒索病毒 事件背景 2020年5月,某公司内外服务器遭遇勒索病毒攻击,应急响应工程师在抵达现场后,对包含服务器在内的13太机器进行系统排查和日志分析。 事件处置 勒索病毒初步判定 首先,对其中一台感染勒索病毒的主机A(源地址为192.168.111.129)进行排查,通过勒索信确认为GlobeImposter勒索病毒,如图所示。 在本地桌面及磁盘发现加密文件后缀为.RESERVE,如图所示。 系统排查 主机账号 通过

qq_50765147的博客 2458

【leetcode】大数相减

https://blog.youkuaiyun.com/lrs1353281004/article/details/81228629

littlemichelle 1891

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1155

LeetCode大数运算

415. 字符串相加 题意:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 返回值:返回相加后的结果字符串。 说明: 1、num1 和num2 的长度都小于 5100 2、num1 和num2 都只包含数字 0-9 3、num1 和num2 都不包含任何前导零 4、你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式 思路: 这道题主要考察对字符串的模拟,模拟两个整数相加的情况。 来看看我们做加法的情况。 步骤: ■ 1、从每个数从低位到高

weixin_44627813的博客 2308

Homebrew国内镜像自动安装全攻略:从零到精通

本文提供了一份详尽的Homebrew国内镜像自动安装指南,旨在帮助Mac用户,特别是国内开发者,快速、无痛地部署这一强大的包管理器。通过使用优化的国内镜像脚本,实现一键自动安装,有效解决官方源访问缓慢或失败的问题。文章从安装前准备、脚本执行步骤、原理讲解到日常使用命令和常见问题排查,提供了从零到精通的完整路径,让用户在短时间内掌握Homebrew的核心用法,提升开发与工作效率。

a0b1c2d3的专栏 967

搜索引擎——ElasticSearch汇总

汇总——ElasticSearch篇 全文检索 问题1:什么是全文检索? 基本概念:对**非结构化数据/结构化数据**先建立**索引**,再对索引进行搜索**文档**的过程叫做全文检索。 什么是非结构化与结构化数据? - 非结构化数据:没有固定的格式的数据(html,word,excel)---没有固定长度,字段约束,描述,散列数据 - 结构化数据:有固定的格式的数据(如:数据库数据)---有固定长度(varchar(50)),字段类型,描述修饰数据 搜索算法:顺序扫描法、倒排索引法 - 顺序

alonewolf_99的博客 1838

常考算法面试题:字符串(大数)相加、字符串(大数)相减、字符串(大数)相乘,解题方法总结

常考算法面试题:字符串相加、字符串相减、字符串相乘 笔者今年秋招,最近投了一些大厂的实习,某为的手撕代码题目为 字符串相乘,某讯的手撕代码题目为字符串相减。 于是去LeetCode和网上搜索了一下,发现这类题目是面试的常考题。只要会四则运算这道题的思路就很清晰,主要字符串的处理,难点也在于字符串处理。 以下代码本人均在GCC编译器下运行过,没有问题。自己写上主函数、输入、调用算法函数即可编译运行验证,或者去leetCode找到原题直接粘贴上去。 1、字符串相加 LeetCode上的字符串相加题目如下所示:

Quan的博客 2138

A算法的蒙特卡洛树搜索

A*算法的蒙特卡洛树搜索 作者:禅与计算机程序设计艺术 1. 背景介绍 在人工智能和游戏开发领域,搜索算法是一个非常重要的研究方向。其中A算法和蒙特卡洛树搜索是两种广泛应用的经典算法。A算法是一种启发式搜索算法,通过评估各个节点到目标节点的启发式代价来引导搜索方向,在

AI天才研究院 1730

leedcode_大数相减

描述 两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如 Java.math.BigInteger 等。 输入 有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位。规定 a&gt;=b,a, b &gt; 0。 测试结果可以用 linux 小工具 bc进行测试是否正确。 输出 返回表示结果整数的字符串 输入样例 1231231...

韩亚军的博客 772

SLAM Cartographer(18)后端优化问题求解器

了解经过闭环检测构建了子图与节点之间的约束之后,通过后端优化求解器进行优化求解。核心是基于Ceres库进行SPA(Sparse Pose Adjustment)的优化方法,把后端优化问题描述成为一个最小二乘的问题求解

氢键H-H 5680

AEJoy —— 表达式之仅限在某一维摆动【JS】

效果图 wiggle() 的作用仅限于水平方向 想法 wiggle() 确实是一个非常方便的工具,但有时您希望对它有更多的控制。在本例中,我们希望仅将摆动限制在水平方向。 设计 要理解 wiggle() 最重要的一点是,它生成的结果与应用它的属性具有相同的维度。例如,如果你将 wiggle() 应用于 3D 层的 position 属性,结果将是一个由三个元素组成的数组(x、y 和 z 各一个)。我们需要做的就是将 wiggle() 的结果捕捉到一个变量(我们称之为 “w” ),然后从这个变量中提取我们想

ShaderJoy 的兴趣技术杂货铺 2094

大数相减java,[Leetcode] Multiply String and Big Interger 大数乘法加法减法

Multiply StringsGiven two numbers represented as strings, return multiplication of the numbers as a string.Note: The numbers can be arbitrarily large and are non-negative.模拟乘法复杂度时间 O(NM) 空间 O(N+M)思路这题...

weixin_35158372的博客 450

【漏洞复现】用友U9 UMWebService.asmx 任意文件读取漏洞

用友U9存在任意文件读取漏洞,未授权的攻击者可以通过该漏洞读取服务器任意文件,造成敏感信息泄露。

qq_67810151的博客 620

大数相加相减相乘

题目:两个非常大的数字相乘(相加,相减)        该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。        大数相乘:假设有A和B两个大数,位数分别为a和b。根据我们平常手动计算乘法的方式可以看出,最终的结果的位数c一定小于等于a+b,我们可以举一个简单的例子来说明,99*999=98901,最终结果是五位(a+b)。下面我们

小琼琼的博客 975

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java 大数相乘、大数相加、大数相减

思路来源::https://blog.youkuaiyun.com/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description */ public class BigNumUtil { /** * 大数相乘 * @param a * @par...

diemangta6631的博客 228

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大数相乘、大数相加、大数相减Java版本

题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。 ...

周壮的博客 164

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java中两个数值相乘_Java中的大数操作(相加,相减,相乘)

该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。大数相乘:假设有A和B两个大数,位数分别为a和b。根据我们平常手动计算乘法的方式可以看出,最终的结果的位数c一定小于等于a+b,我们可以举一个简单的例子来说明,99*999=98901,最终结果是五位(a+b)。下面我们根据98*765=74970来看看结果中的每一位是怎么得来的,最后一位0是A的最...

weixin_30760143的博客 2532

大数相加,大数相乘,大数相减

题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。 大数相乘:假设有A和B两个大数,位数分别为a和b。根据我们平常手动计算乘法的方式可以看出,最终的结果的位数c一定小于等于a+b,我们可以举一个简单的例子来说明,99*999=98901,最终结果是五位(a+b)。下面我们根据9...

zhangbaoanhadoop的博客 373

超大数相乘的java代码,java版大数相乘

在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的用java搞了一个版本这里说一下思路将数字已字符串形式接收,转换成int[]整型数组,然后num1[],num2[]依次相乘,结果保存到result[]中其他注意的在注释中有说明package com.gxf.test;import java.util.Scanner;public class BigDataMultiply...

weixin_28864139的博客 639

大数据相加_链表解大数据相加减相乘

/*题意:大数相加减相乘单链表的运用*/#include#include#includechar c;int flag;typedef struct node{char data;struct node *next;} Node;Node *a[10];Node *create_link(){Node *head,*p;head=p=NULL;char m;while(1){scanf("%c",...

weixin_39610807的博客 172

Java中的大数操作(相加,相减,相乘)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33963189的博客 482

大数相加(相减,相乘,相除)

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 308085    Accepted Submission(s): 59547 Problem Description I have a

昨日明眸 1126

算法题——JAVA实现大数乘法

大致思路 输入的乘数存到字符串里,然后倒置(结果记得倒回来)。 第二位乘第一位和第一位乘第二位放入同一个位置。(以此类推) /** * 分治法 */ public class BigDecimal { // 以字符串的方式输入两个超大的整数,将两个数值相乘的结果计算出来 public static void main(String[] args) { ...

weixin_38311255的博客 431

java大整数乘法分治法,大数相乘(分治法, C/C++)

1、分治法有两点需要理解:(1)分治法基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。(2)递归的解这些子问题,然后将各子问题的解合并得到原问题的解。分治法的重点是分析问题是否可以划分为规模较小的子问题,难点是如何划分以及划分之后如何将各个子问题的解合并成最终的解。这一般需要用到数学知识或者其他理论。以大数相乘为例,有A,B两个大数,都为n位,要计算A*...

weixin_34882814的博客 659

大数的加减乘除(java实现-未使用jdk中原生的大数)

大数相乘: 大数相加: 大数相减: 大数相除:

Wenlong_L的博客 373
上一篇: 231,338,326,Power of Two(Three,Four)Counting Bits 类似的技巧题
下一篇: 度度熊与邪恶大魔王(DP)C++ AC
Mike_CSU
博客等级 码龄10年 6粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值