Java实现俩个大数相乘

Java 大数相乘 将大数相乘分成三步 1:定义 单个数 与 大数相乘 2:定义 两个大数相加 3:将单个数与大数相乘结果 用 定义好的 大数相加函数 加起来 import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args){ String num1 = "17543231453" 阅读详情

不用BigInteger实现两个大数字相乘

思路

位数123
数字345
678

如表所示
两个数345和678
两个数位数相加为6的数积为40
两个数位数相加为5的数为32+35
两个数位数相加为4的数为24+30+28
两个数位数相加为3的数为21+24
两个数位数相加为2的数为18
然后逐次进行进位得到最终的数
在这里插入图片描述

代码实现

    public static void main(String[] args) {
        System.out.println("请输入两个大数");
        Scanner scanner = new Scanner(System.in);
        if (scanner.hasNext()){
            String num1 = scanner.next();
            String num2 = scanner.next();
            System.out.println("相乘结果为:"+getNum(num1, num2));
        }

    }


    public static String getNum(String num1,String num2){
        char[] char1 = num1.toCharArray();
        char[] char2 = num2.toCharArray();

        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();

        //将char字符串转换为对应的数字
        for (char c : char1) {
            list1.add(c - '0');
        }
        for (char c : char2) {
            list2.add(c - '0');
        }
        //设置一个定长的集合用于存放计算过后的结果
        List<Integer> resList = new ArrayList<>(Collections.nCopies(list1.size()+list2.size(),0));

        for (int i = 0; i < list1.size(); i++) {
            for (int j = 0; j < list2.size(); j++) {
                resList.set(i+j,resList.get(i+j)+list1.get(i)*list2.get(j));
            }
        }

        for (int i = resList.size() - 1; i > 0; i--) {
            resList.set(i-1,resList.get(i-1)+resList.get(i)/10);
            resList.set(i,resList.get(i)%10);
        }
        StringBuffer sb = new StringBuffer();
        resList.stream().limit(resList.size()-1).forEach(i->{
            sb.append(i);
        });

        return sb.toString();
    }

测试结果

在这里插入图片描述

在这里插入图片描述

C++ 实现大数相乘 如果这两个数比较小(即能用计算机的int、long类型表示,并且相乘后的结果任然能够表示)那么直接用计算机 的乘法运算就可以了。这里的大数指的是用计算机的预设类型(int、long等)无法表示的数,如:11111111111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111 阅读详情

相关推荐

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1822

Java实现乘法的方法——(三种)

最近在看一篇java的笔试题,里面要求用效率最高的方法求2*8,然后第一反应就是直接使用Java自带的乘法,然后发现其实还可以使用位运算符 “<<” 进行计算(如移了N位则乘了2的N次方)。所以我从中总结了三种方法来实现乘法的计算。希望对大家有帮助 方法1(直接相乘): 该方法最直接: // An highlighted block int d = 2 * 8; System.out.println(d); //d = 16 方法2(for循环相加): 此方法利用了乘法的原理,即多次使

m0_67391521的博客 1413

Unity游戏开发必备:HybridCLR热更新实战教程(含iOS/Android适配指南)

本文详细介绍了HybridCLR在Unity游戏开发中的热更新实战教程,包括iOS/Android平台适配指南。通过环境配置、项目结构规划、热更新工作流实现等步骤,帮助开发者高效掌握C#热更新技术,解决移动游戏快速迭代的痛点问题。

weixin_29011395的博客 441

在Java中实现两数相乘

加法:add()函数 减法:subtract()函数 乘法:multiply()函数 除法:divide()函数 绝对值:abs()函数

weixin_44543108的博客 7810

TK抓包协议分析:So层逆向

第三个参数是一个回调函数,这里他的返回值1表示成功,0表示失败,那我们手动把他Hook为0,让他不支持quic协议,实现降级。等,我们是为了解决抓包问题,那很有可能是在net目录下(network),那来搜索一下。开了抓包以后APP直接是网络无连接了,并且抓到的请求也是不正常的,下面我们就开始定位。看了半天感觉也没啥有用的东西,那下面我们整理一下已经有信息,来猜测一下,后续怎么进行。那可以猜测,我们真正需要Hook的那个函数也有可能是这样加载的,可以字符串搜索一下。

2503_90751938的博客 3417

地震勘探中的频谱分析:从基础到应用

本文深入探讨了地震勘探中的频谱分析技术,从基础原理到实际应用。通过傅里叶变换等工具,频谱分析能有效识别不同地震波的频率特征,指导数据采集和处理。文章结合油田勘探案例,展示了如何利用振幅谱和相位谱提升信噪比,并介绍了智能滤波等前沿技术在地震数据处理中的应用。

weixin_42557830的博客 406

java实现乘法的方法

首先,我们可以在一个函数中定义一个名为 double*的变量,然后函数返回时,我们就可以直接对这个变量进行赋值操作,这样我们就可以直接对这个变量进行乘法运算了。这里需要注意的是, final修饰的变量是不能修改的,所以如果你想修改这个变量,那么一定要在函数外面先定义一个新的变量。当我们在定义一个方法的时候,我们可以通过 public static修饰方法来进行操作,比如我们可以这样定义一个方法: public static修饰方法的意思是:这个方法只能被当前类的实例访问,而且不能被重载。

花生日记 6033

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2025

俩个大数相乘(java实现)

package com.example;/** * * @author ZHANGHAOHAO089 * @date 2017/6/27 */public class BigNumber { public static void main(String args[]) { String str1 = "121255"; String str2 = "23

android_Text的专栏 1470

复现论文《大规模风电场电磁暂态高效建模仿真方法》

本文提出了一种针对大规模风电场电磁暂态(EMT)仿真的高效建模方法。通过三种关键技术实现仿真加速:(1)永磁直驱风电机组一体化等效建模,采用节点导纳矩阵降维将25节点机组简化为4端子电路,仿真速度提升1-3个数量级;(2)基于戴维南/诺顿等效和OpenMP并行计算的风电场整体建模,通过串并联叠加实现节点收缩,30台机组仿真加速近万倍;(3)受控源映射解耦方法提高故障仿真灵活性。复现代码展示了核心算法实现,包括导纳矩阵Schur补降维、多进程并行计算框架以及受控源解耦方法。

huanghm88的专栏 278

基于ESP32和OV5640的目标检测系统

本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。

reset2021的博客 329

两个大数相乘JAVA版

翻出了之前在庞果网编程英雄会上用JAVA实现的一个两个大数相乘的程序,和大家分享一下: public class MyMultiply { /** * @param args */ public static void main(String[] args) { // System.out.println("Hello world"); //String str1 = "

wangqiuyun的专栏 1万+

学Simulink--进阶电机控制场景实例:基于Simulink的异步电机定子磁链定向控制(SFOC)仿真

本文详细介绍了基于Simulink的异步电机定子磁链定向控制(SFOC)仿真实现方法。主要内容包括:1) SFOC原理分析,突出其对转子参数不敏感的优势;2) 工业风机驱动系统的完整建模流程,涵盖主电路搭建、坐标变换、磁链观测器设计等关键步骤;3) 核心模块代码实现,包括电压模型磁链观测器和双闭环PI控制器;4) 仿真结果验证了SFOC在转速响应(0.2s)、转矩恢复(0.15s)和参数鲁棒性(转子电阻变化50%时转速波动<2%)方面的优异性能。本文为工程师提供了实用的SFOC系统开发指南,特别适用于

amy_mhd的博客 116

Java实现大数相乘

大数相乘算法,可以避免因得数过大超过数据范围而显示错误的问题。 我所使用的大数相乘算法为逐位相乘处理进位法,主要运用了数组倒序和数组数组移动的方法。 大致原理为:如12345×678,先将12345和678倒序,然后相乘,每一位的结果为相乘后的结果加上上一位的进位: 得到结果后,将三个得数数组进行移动然后相加,这一步可以同步执行: 最后的结果逆序输出,即为答案。 代码实现: import java.util.Scanner; public class Multiplication { public

Bare_Man的博客 3173

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

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

题目:两个非常大的数字相乘(相加,相减)        该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。        大数相乘:假设有A和B两个大数,位数分别为a和b。根据我们平常手动计算乘法的方式可以看出,最终的结果的位数c

lichong_87的备忘录 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

算法之大数相乘

1. 大数相乘问题 计算:999999999999999999999999999999 x 999999999999999999999999999999 = ?(30个9乘以30个9) 在JAVA语言中表示数字的类型有byte、short、int、long,这些类型都有其表示的数据范围,超过了能表示的范围就会产生数据溢出,比如: // 输出int能表示的最大数加1后的数 System.out.println(Integer.MAX_VALUE + 1); int能表示的最大数是2147483647,但

天天向上 3341

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java处理两个大数相乘

package com.ps.test; import java.util.Scanner;      public class bigNumMultiply {         /**       * 实现两个大数相乘       * @param args       */      public static final int MAX_LEN = 100

2847

Java大数相乘(使用BigInteger和BigDecimal以及使用数组实现大数相加)

文章目录1.BigInteger和BigDecimal2.大数相乘的题 1.BigInteger和BigDecimal 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。 在运算中 BigInteger 类型可以准确地表示任何大小的整数值,它可以表示的范围比integer大得多了。 Big

押切徹的博客 2385

【LeetCode43:字符串相乘(大数相乘)(Java实现)】

字符串相乘或大数相乘问题

NorthSmile的博客 1611

JAVA中大数相乘的实现

大数的运算,其思想是将其看成字符串,因为int、double、long等数据类型都有大小限制 package compare; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; /** * 大数相乘,其主要思想是将其看成字符串处理 * @author HANS */ pub...

Fat Panda的博客 434

大数相乘 java_大数相乘——java版

之前面试的时候被问到两个很大很大的数相乘在java中怎么把它算出来,显然不能直接相乘,当时我只回答出来了用BigInteger,然而不是最好的答案。大数相乘的核心思想是将数字转化为字符串,然后逐位相乘转化最后才得出结果。先上一段代码:public static void main(String[] args) {String str1 = "23451515412151511212";String...

weixin_29822105的博客 786

JAVA两个大数相乘

大数处理是科研过程中常见的问题,尤其在天文学,气象学等。在面试中,大数处理,尤其是两个大数相乘更是常客。在Java语言中,长整型long占8个字节,能表示的最大值为2^64 = 9223372036854775807(Long.MAX_VALUE),而这只有19位,分配到每个数至多8位(两个数位数一样),远远不能满足要求。所以,大数相乘要换个思路,从乘法的原理入手,下面说说我的思路。 1,预处理

TWgFWHuD的博客 3333

java 大数相乘(数组方法实现)

栗子:987654321 乘以 11 public class Main { public static void main(String[] args) { int[] sum = new int[50]; sum[sum.length-1] = 1; // 默认最后一个为 1 int n = 100; // 100...

memory_cood的博客 1053
上一篇: Java实现二维数组中查询是否存在某一个数字
下一篇: Java代码实现替换空格
blitheW
博客等级 码龄7年 7粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值